Aller au contenu
galdurdocs

Handles : activer, cacher, info-bulle

Chaque méthode add… renvoie un handle. Il garde l’état de l’élément avant et après l’ouverture de la fenêtre : tu peux désactiver un bouton, cacher une ligne ou expliquer un choix avec une info-bulle.

⏱ 5 minGaldur UI 0.1.0Client

Les trois états

Un ElementHandle change trois choses sur n’importe quel élément :

ÉtatMéthodeEffet
DésactivésetEnabled(false)Dessiné dans une couleur atténuée, ignore la souris et le clavier. L’info-bulle s’affiche toujours au survol, pour expliquer pourquoi.
CachésetVisible(false)N’est plus dessiné et libère sa place : la fenêtre se remet en page sans lui.
Info-bullesetTooltip(text)Texte affiché au survol de l’élément. null l’enlève.
Example.java
ElementHandle confirm = window.addButton(Component.literal("Confirm"), this::confirm);confirm.setEnabled(false);confirm.setTooltip(Component.literal("Fill in the form first"));ElementHandle details = window.addText(Component.literal("Details..."));details.setVisible(false);   // l’élément disparaît et libère sa place

Un changement fait fenêtre ouverte se voit à l’image suivante. Appelle les handles sur le thread client.

Pourquoi l’état vit dans le handle

Minecraft reconstruit les widgets à chaque redimensionnement. L’état vit dans le handle, pas dans le widget affiché : une case cochée reste cochée, une ligne cachée reste cachée, les nouveaux widgets relisent l’état.

Relier des éléments entre eux

Les handles permettent de lier les éléments facilement. Activer « Take » seulement quand une ligne est choisie :

Example.java
ElementHandle take = buttons.addButton(Component.literal("Take"), this::take);take.setEnabled(false);list.onSelect(index -> take.setEnabled(index >= 0));

Afficher une ligne seulement quand une case est cochée :

Example.java
ElementHandle detail = window.addText(Component.literal("12 items, 3 different kinds"));detail.setVisible(false);CheckboxHandle showDetail = window.addCheckbox(Component.literal("Show details"), false);showDetail.onChange(detail::setVisible);

Les handles spécialisés

Certains éléments renvoient un handle avec plus de méthodes. Tous sont aussi des ElementHandle.

HandleRenvoyé parAjoute
CheckboxHandleaddCheckboxisChecked, setChecked, onChange
ListHandleaddListsetLines, addLine, getSelected, onSelect
SearchHandleaddSearchgetText, setText, onChange (à chaque touche)
ProgressHandleaddProgresssetProgress(0..1), setProgress(done, total), setLabel
RowHandleaddRowaddText, addButton, addIconButton, addCheckbox
TabsHandleaddTabsaddTab, getSelected, setSelected, onSelect
Une action par handle

onChange et onSelect ne gardent qu’une action : un nouvel appel remplace le précédent. Ils se déclenchent quand la valeur change vraiment, que le changement vienne du joueur ou de ton code.

Rangées et onglets

Sur une rangée ou une rangée d’onglets, les trois états s’appliquent à tout ce qu’elle contient :

  • désactivée, une rangée désactive tous ses éléments ; une rangée d’onglets ne peut plus changer d’onglet, et le contenu affiché est désactivé aussi ;
  • cachée, elle disparaît avec son contenu et libère sa place ;
  • info-bulle : sur une rangée, elle s’affiche sur les éléments qui n’en ont pas ; sur une rangée d’onglets, seulement au survol des onglets, pas du contenu.

Barres de progression

Un ProgressHandle est relu à chaque image : mets-le à jour aussi souvent que tu veux, à chaque tick par exemple, sans reconstruire l’écran.

Example.java
ProgressHandle craft = window.addProgress(Component.literal("Iron ingots: 0 / 64"));craft.setProgress(16, 64);craft.setLabel(Component.literal("Iron ingots: 16 / 64"));

La largeur de la barre est calculée à la construction de l’écran, d’après le texte. Un texte plus long donné ensuite est coupé avec « … » jusqu’à la prochaine reconstruction.

© 2026 Galdur Studio · galdurstudio.com · Discord · LGPL-3.0-onlyProduit non officiel. Non approuvé par Mojang ou Microsoft, ni associé à eux.