Je travaille sur le projet JavaFX. J'ai besoin d'effectuer une tâche 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<Boolean>()
{
@Override
public void changed(ObservableValue<? extends Boolean> 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 vous sera utile!
Vous pouvez utiliser le focusedProperty
de Node
pour attacher un ChangeListener
.
Étendre la réponse de Brendan: de JavaFX8 (car il est fourni avec Java 8), une expression lambda combinée à un opérateur ternaire peut la rendre vraiment compacte:
textField.focusedProperty().addListener((obs, oldVal, newVal) ->
System.out.println(newVal ? "Focused" : "Unfocused"));
Vous souhaiterez attacher un ChangeListener à la FocusProperty du TextField que vous souhaitez surveiller.
Dans JavaFX, vous pouvez attacher des événements de notification (écouteurs de changement ou d'invalidation) à toute propriété JavaFX qu'un objet peut posséder tant que la propriété répond à la définition minimale d'un bean JavaFX.
Reportez-vous à ce message si vos gestionnaires d'événements feront d'autres choses telles que la modification des paramètres des boutons Annuler ou Par défaut: JavaFX 2 - Définition de la propriété defaultButton: mutuellement exclusifs?
Voici un code pour attacher un écouteur de changement à une zone de texte:
txtDx.focusedProperty().addListener(m_txtDxListener);
L'objet Listener a été stocké dans un champ d'instance afin de pouvoir être utilisé avec addListener () et removeListener (). Pour un TextField de courte durée, vous pouvez spécifier l'objet écouteur avec une classe interne anonyme.
Voici la classe privée que j'ai écrite pour mon auditeur de focus:
private class FocusPropertyChangeListener implements ChangeListener<Boolean> {
FocusPropertyChangeListener() { System.out.println("New FPCL instance"); }
@Override
public void changed(ObservableValue<? extends Boolean> ov,
Boolean oldb, Boolean newb) {
System.out.println("Focus change triggered");
if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) {
boolean b = (newb != null && newb.booleanValue() == true);
System.out.println("txtDx focus change event triggered: DxAdd = " + b);
if (b) { btnDxAdd.setDefaultButton(true); }
else { btnWindowCommit.setDefaultButton(true); }
btnWindowCommit.setCancelButton(true);
btnDxAdd.setDefaultButton(b);
}
}
}