SearchField
Champ de saisie stylé Apocaly avec placeholder i18n et callback par frappe. Utilisé pour filtrer des listes en temps réel.
package ca.tawess123.apocalyinterface.api.widget;
Builder
SearchField field = SearchField.builder()
.placeholderKey(String key) // clé i18n du placeholder
.onChange(Consumer<String> callback) // appelé à chaque frappe
.maxLength(int max) // longueur maximale (défaut : 64)
.visibleIf(boolean visible) // visibilité conditionnelle
.build();
Options du builder
| Option | Type | Défaut | Description |
|---|---|---|---|
.placeholderKey(String) | String | null | Clé i18n du texte placeholder (affiché quand le champ est vide). |
.onChange(Consumer<String>) | Consumer<String> | null | Callback appelé à chaque frappe. Reçoit le contenu courant du champ. |
.maxLength(int) | int | 64 | Nombre maximal de caractères. |
.visibleIf(boolean) | boolean | true | Masque le champ si false (0 px). |
Hauteur
20 px (ApocalyDimensions.BUTTON_HEIGHT).
Exemple — filtrage de liste en temps réel
import ca.tawess123.apocalyinterface.api.widget.SearchField;
import ca.tawess123.apocalyinterface.api.widget.ClickableList;
private String searchQuery = "";
private final List<String> allItems = List.of("Diamant", "Émeraude", "Rubis", "Saphir");
@Override
protected void buildLayout(Column root) {
root.add(SearchField.builder()
.placeholderKey("monmod.search.items")
.maxLength(20)
.onChange(query -> {
searchQuery = query;
update(); // relance buildLayout avec la nouvelle query
})
.build());
List<String> filtered = allItems.stream()
.filter(s -> s.toLowerCase().contains(searchQuery.toLowerCase()))
.toList();
root.add(buildItemList(filtered));
}
Exemple — avec init() au lieu de update()
Si le filtrage est léger et que le scroll n'est pas important à préserver, init() fonctionne aussi :
root.add(SearchField.builder()
.placeholderKey("monmod.search.membres")
.onChange(query -> { searchQuery = query; init(); })
.build());
Notes
- Le champ gère le focus automatiquement — clic pour activer,
Escapepour fermer l'écran. - La bordure change de couleur (
ApocalyColors.BORDER) quand le champ est actif. - Il n'y a pas de méthode pour lire la valeur courante en dehors du callback — stocke-la dans un champ.
Voir aussi
- Référence ClickableList — liste filtrée par SearchField
- Recette : Liste de joueurs — exemple complet SearchField + ClickableList