Comment effectuer une tâche sur javaFX TextField à onfocus et outfocus?
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");
3 réponses
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 est utile!
vous voudrez attacher un ChangeListener à la propriété de mise au point du champ de texte que vous souhaitez surveiller.
dans JavaFX, vous pouvez attacher des événements de notification (changement ou invalidation des écouteurs) à n'importe quelle propriété JavaFX qu'un objet peut posséder tant que la propriété répond à la définition minimale pour un haricot JavaFX.
se Référer à ce post si vos gestionnaires d'événements seront à faire d'autres choses telles que la modification de l'Annuler ou de paramètres par Défaut des boutons: JavaFX 2 -- Définir la propriété defaultButton: mutuellement exclusive?
voici un code pour attacher un auditeur 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é à la fois avec addListener() et removeListener(). Pour un champ de texte de courte durée, vous pouvez spécifier l'objet d'écoute avec une classe interne anonyme.
Voici la classe privée que j'ai écrit pour mon interlocuteur:
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);
}
}
}
vous pouvez utiliser le focusedProperty
de Node
pour joindre un ChangeListener
.
extension de la réponse de Brendan: de JavaFX8 (comme il est livré avec Java 8), une expression lambda combiné avec un opérateur ternaire peut le rendre vraiment compact:
textField.focusedProperty().addListener((obs, oldVal, newVal) ->
System.out.println(newVal ? "Focused" : "Unfocused"));