Comment effectuer une tâche sur javaFX TextField à la mise au point et à la mise au point?

Je travaille sur un projet JavaFX. Je dois effectuer certaines tâches sur un JavaFX TextField .

Par exemple sur l’événement “on focus” pour le TextField je veux imprimer

 System.out.println("Textfield on focus"); 

et sur l’événement “out focus” il devrait imprimer

 System.out.println("Textfield out focus"); 

J’ai pensé qu’il pourrait être utile de voir un exemple qui spécifie le ChangeListener comme une classe interne anonyme comme scottb mentionné.

 TextField yourTextField = new TextField(); yourTextField.focusedProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue arg0, Boolean oldPropertyValue, Boolean newPropertyValue) { if (newPropertyValue) { System.out.println("Textfield on focus"); } else { System.out.println("Textfield out focus"); } } }); 

J’espère que cette réponse est utile!

Vous souhaiterez attacher un ChangeListener à la FocusProperty du TextField que vous souhaitez surveiller.

Dans JavaFX, vous pouvez attacher des événements de notification (Change ou Invalidation Listeners) à toute propriété JavaFX qu’un object peut posséder tant que la propriété répond à la définition minimale d’un bean JavaFX.

Reportez-vous à cette publication si vos gestionnaires d’événements effectuent d’autres opérations, telles que la modification des parameters des boutons Annuler ou Par défaut: JavaFX 2 – Définition de la propriété defaultButton: mutuellement exclusives?

Voici un code pour attacher un écouteur de modification à une zone de texte:

 txtDx.focusedProperty().addListener(m_txtDxListener); 

L’object Listener a été stocké dans un champ d’instance afin qu’il puisse être utilisé avec addListener () et removeListener (). Pour un TextField de courte durée, vous pouvez spécifier l’object d’écoute avec une classe interne anonyme.

Voici la classe privée que j’ai écrite pour mon interlocuteur principal:

 private class FocusPropertyChangeListener implements ChangeListener { FocusPropertyChangeListener() { System.out.println("New FPCL instance"); } @Override public void changed(ObservableValue ov, Boolean oldb, Boolean newb) { System.out.println("Focus change sortingggered"); if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) { boolean b = (newb != null && newb.booleanValue() == true); System.out.println("txtDx focus change event sortingggered: DxAdd = " + b); if (b) { btnDxAdd.setDefaultButton(true); } else { btnWindowCommit.setDefaultButton(true); } btnWindowCommit.setCancelButton(true); btnDxAdd.setDefaultButton(b); } } } 

Vous pouvez utiliser le focusedProperty of Node pour attacher un ChangeListener .

Etendre la réponse de Brendan: à partir de JavaFX8 (comme dans Java 8), une expression lambda associée à un opérateur ternaire peut le rendre très compact:

 textField.focusedProperty().addListener((obs, oldVal, newVal) -> System.out.println(newVal ? "Focused" : "Unfocused"));