Aller au contenu principal

ClickableList<T>

Étend ScrollableList avec surbrillance au survol (HOVER_FILL) et callback de sélection. Utiliser quand l'utilisateur doit cliquer sur une ligne.

package ca.tawess123.apocalyinterface.api.widget;

Builder

ClickableList<MonType> list = ClickableList.<MonType>builder()
.items(List<T> items) // liste d'éléments (requis)
.rowHeight(int height) // hauteur par ligne (défaut : 12 px)
.visibleRows(int rows) // lignes visibles (défaut : 6)
.rowRenderer(RowRenderer<T> r) // renderer (requis)
.onSelect(Consumer<T> callback) // action au clic
.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.
.onSelect(Consumer<T>)Consumer<T>nullCallback déclenché au clic gauche sur une ligne. Reçoit l'élément cliqué.
.visibleIf(boolean)booleantrueMasque la liste si false (0 px).

Comportement additionnel par rapport à ScrollableList

  • Survol : fond ApocalyColors.HOVER_FILL (blanc 20 % alpha) dessiné avant le rowRenderer.
  • Clic : onSelect(item) déclenché au clic gauche.

Exemple — liste de joueurs cliquable

import ca.tawess123.apocalyinterface.api.widget.ClickableList;
import ca.tawess123.apocalyinterface.api.theme.ApocalyColors;
import net.minecraft.client.Minecraft;

var font = Minecraft.getInstance().font;

private String joueurSelectionne = "";

root.add(ClickableList.<String>builder()
.items(joueurs)
.visibleRows(6)
.rowHeight(14)
.rowRenderer((gfx, joueur, x, y, w, mx, my) -> {
gfx.drawString(font, joueur, x + 3, y + (14 - 9) / 2,
ApocalyColors.TEXT, false);
})
.onSelect(joueur -> {
joueurSelectionne = joueur;
init(); // ou update() si les données changent aussi
})
.build());

Exemple — boutique avec sélection

// items de boutique — l'item sélectionné est affiché dans un panneau détails
private String articleSelectionne = items.get(0);

root.add(ClickableList.<String>builder()
.items(items)
.visibleRows(6)
.rowHeight(14)
.rowRenderer((gfx, item, x, y, w, mx, my) -> {
gfx.drawString(font, item, x + 3, y + 3, ApocalyColors.TEXT, false);
})
.onSelect(item -> {
articleSelectionne = item;
init();
})
.build());

Notes

  • La surbrillance est dessinée par ClickableList avant le rowRenderer. Tu n'as pas à la gérer manuellement.
  • Pour détecter le survol dans le rowRenderer (ex. changer la couleur du texte), compare my avec y et y + rowHeight.

Voir aussi