Dans ce cas tu dois obtenir les références vers les contrôles en question et tu peux faire label.textProperty().bind(field.textProperty()). Peu importe qu'ils soient ou pas dans des fenêtres ou des containers séparés, il te faut trouver un moyen d'exposer les contrôles.
Mais si ton architecture ne permet pas de le faire directement comme indiqué plus haut (sécurité ou séparation et isolation des contrôles et de l’implémentation), tu peux t'arranger en passant par des callback. Par exemple si ton champ texte est dans le contrôleur A et ton label dans le contrôleur B, tu peux rajouter dans ton contrôleur A une méthode :
1 2 3 4 5 6 7
|
field.textProperty().addListener((observable, oldValue, newValue) -> Optional.offNullable(getOnTextModified()).ifPresent(c -> c.accept(newValue)));
public void setOnTextModified(Consumer<String> queFaireQuandLeTexteChange) { ... }
public Consumer<String> getOnTextModified() { ... } |
tandis que ton contrôleur B expose une méthode :
1 2 3
| public setText(String value) {
label.setText(value);
} |
Et ensuite :
controllerA.setOnTextModified(controllerB::setText));
Et si A et B ne sont pas visibles depuis un endroit centralise (l'endroit qui gère les 2 fenêtres) et ben on fait la même chose au niveau supérieur etc.
Mais c'est une manière de faire parmi plein d'autres ! le but c'est arriver a trouver un endroit ou les 2 parties disjointes (fenêtres / containers / contrôleurs) puissent communiquer entre elles pour propager les changements de valeur.
Partager