Onglets
Une rangée d’onglets découpe une fenêtre en pages. Chaque onglet se remplit comme une fenêtre, et la fenêtre garde la taille du plus grand onglet : rien ne saute quand le joueur change d’onglet.
Ajouter des onglets
addTabs() ajoute une rangée d’onglets et renvoie un TabsHandle. Chaque addTab() renvoie un TabHandle, qui se remplit avec les mêmes méthodes add… qu’une fenêtre.
TabsHandle tabs = window.addTabs(true); // true = centréTabHandle storage = tabs.addTab(Component.literal("Storage"));storage.addSearch(Component.literal("Search..."));storage.addList(6);TabHandle crafting = tabs.addTab(Component.literal("Crafting"));crafting.addText(Component.literal("3 × 3 grid"));Le premier onglet ajouté est actif au départ. Seul le contenu de l’onglet actif est affiché, sous la rangée.
Les onglets s’ajoutent à la fenêtre, pas dans un onglet : un onglet ne contient pas d’autre rangée d’onglets.
Changer d’onglet depuis le code
tabs.onSelect(index -> System.out.println("Tab: " + index));crafting.select(); // comme tabs.setSelected(1)onSelect est appelé chaque fois que l’onglet actif change vraiment, que le joueur ait cliqué ou que ton code ait appelé setSelected. Le nouveau contenu remplace l’ancien à l’image suivante.
Un bouton « Onglet suivant », par exemple :
RowHandle actions = window.addRow(true);actions.addButton(Component.literal("Next tab"), () -> tabs.setSelected((tabs.getSelected() + 1) % tabs.getTabs().size()));L’état est conservé
L’état vit dans les handles, pas dans les widgets affichés : l’onglet actif survit aux redimensionnements, et le contenu de chaque onglet (texte de recherche, défilement de liste…) est gardé quand on change d’onglet.
Les handles d’un onglet caché restent utilisables à tout moment. Un changement dans un onglet caché se voit quand le joueur y revient : une case dans un onglet peut donc activer un bouton dans un autre.
CheckboxHandle advanced = autocraft.addCheckbox(Component.literal("Advanced mode"), false);advanced.onChange(options::setEnabled); // « options » est dans l’onglet StorageTaille et mise en page
La fenêtre garde la taille du plus grand contenu d’onglet : elle ne change pas de taille quand on change d’onglet. Le contenu glisse depuis son côté au changement d’onglet (sauf si les animations sont coupées, voir Animations).
La rangée d’onglets est un élément comme un autre : désactive-la pour bloquer l’onglet actuel, cache-la pour retirer la rangée et tout son contenu, ou donne-lui une info-bulle :
tabs.setTooltip(Component.literal("Left and right arrows switch tabs"));