Aller au contenu principal

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

OptionTypeDéfautDescription
.items(List<T>)List<T>Éléments à afficher. Requis.
.rowHeight(int)int12Hauteur fixe de chaque ligne en pixels.
.visibleRows(int)int6Nombre de lignes visibles. Détermine la hauteur totale.
.rowRenderer(RowRenderer<T>)RowRenderer<T>Fonction de rendu par ligne. Requis.
.visibleIf(boolean)booleantrueMasque 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.


Voir aussi