ScrollableList<T>
Liste scrollable générique avec renderer personnalisé. Chaque ligne est dessinée par le RowRenderer que tu fournis.
package ca.tawess123.apocalyinterface.api.widget;
Builder
ScrollableList<MonType> list = ScrollableList.<MonType>builder()
.items(List<T> items) // liste d'éléments (requis)
.rowHeight(int height) // hauteur fixe par ligne (défaut : 12 px)
.visibleRows(int rows) // nombre de lignes visibles (défaut : 6)
.rowRenderer(RowRenderer<T> r) // renderer personnalisé (requis)
.visibleIf(boolean visible) // visibilité conditionnelle
.build();
Options du builder
| Option | Type | Défaut | Description |
|---|---|---|---|
.items(List<T>) | List<T> | — | Éléments à afficher. Requis. |
.rowHeight(int) | int | 12 | Hauteur fixe de chaque ligne en pixels. |
.visibleRows(int) | int | 6 | Nombre de lignes visibles. Détermine la hauteur totale. |
.rowRenderer(RowRenderer<T>) | RowRenderer<T> | — | Fonction de rendu par ligne. Requis. |
.visibleIf(boolean) | boolean | true | Masque la liste si false (0 px). |
Interface RowRenderer<T>
@FunctionalInterface
public interface RowRenderer<T> {
void render(
GuiGraphics gfx,
T item, // l'élément de la liste
int x, // position X gauche de la ligne
int y, // position Y haute de la ligne
int width, // largeur disponible
int mouseX,
int mouseY
);
}
Hauteur totale
hauteur totale = visibleRows × rowHeight
Le scrollbar apparaît automatiquement si items.size() > visibleRows.
Exemple
import ca.tawess123.apocalyinterface.api.widget.ScrollableList;
import ca.tawess123.apocalyinterface.api.theme.ApocalyColors;
import net.minecraft.client.Minecraft;
import java.util.List;
var font = Minecraft.getInstance().font;
List<String> membres = List.of(
"Tawess123", "King", "Debetaz", "Oshimia",
"Zenos", "MrBean", "Numb_26", "Davidutz_"
);
root.add(ScrollableList.<String>builder()
.items(membres)
.visibleRows(5)
.rowHeight(14)
.rowRenderer((gfx, membre, x, y, w, mx, my) -> {
// Centrage vertical dans la ligne
int textY = y + (14 - 9) / 2;
gfx.drawString(font, membre, x + 3, textY, ApocalyColors.TEXT, false);
})
.build());
Exemple avec type personnalisé
record Joueur(String pseudo, boolean enLigne) {}
List<Joueur> joueurs = fetchJoueurs();
root.add(ScrollableList.<Joueur>builder()
.items(joueurs)
.visibleRows(6)
.rowHeight(12)
.rowRenderer((gfx, joueur, x, y, w, mx, my) -> {
int couleur = joueur.enLigne() ? ApocalyColors.SUCCESS : ApocalyColors.MUTED_TEXT;
gfx.drawString(font, joueur.pseudo(), x + 3, y + 2, couleur, false);
})
.build());
Différence avec ClickableList
ScrollableList est en lecture seule. Pour une liste avec clic et surbrillance au survol, utiliser ClickableList.