Aller au contenu principal

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

OptionTypeDéfautDescription
.placeholderKey(String)StringnullClé i18n du texte placeholder (affiché quand le champ est vide).
.onChange(Consumer<String>)Consumer<String>nullCallback appelé à chaque frappe. Reçoit le contenu courant du champ.
.maxLength(int)int64Nombre maximal de caractères.
.visibleIf(boolean)booleantrueMasque 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, Escape pour 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