¿Cómo se realiza la tarea en javaFX TextField en onfocus y outfocus?

Estoy trabajando en el proyecto JavaFX. Necesito realizar alguna tarea en un JavaFX TextField .

Por ejemplo, en el evento “en foco” para TextField , quiero imprimir

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

y en el evento “out focus” debería imprimir

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

Pensé que podría ser útil ver un ejemplo que especifique el ChangeListener como una clase interna anónima como scottb mencionó.

 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"); } } }); 

¡Espero que esta respuesta sea útil!

Deberá adjuntar un ChangeListener a FocusProperty del TextField que desea supervisar.

En JavaFX, puede adjuntar eventos de notificación (Escucha de invalidación o de invalidación) a cualquier propiedad JavaFX que un objeto pueda poseer, siempre que la propiedad cumpla con la definición mínima para un bean JavaFX.

Consulte esta publicación si sus controladores de eventos harán otras cosas, como la modificación de la configuración del botón Cancelar o Predeterminado: JavaFX 2 – Configuración de la propiedad defaultButton: ¿mutuamente exclusiva?

Aquí hay un código para adjuntar un Listener de cambio a un cuadro de texto:

 txtDx.focusedProperty().addListener(m_txtDxListener); 

El objeto Listener se ha almacenado en un campo de instancia para que se pueda usar con addListener () y removeListener (). Para un TextField efímero, puede especificar el objeto detector con una clase interna anónima.

Aquí está la clase privada que escribí para mi oyente de enfoque:

 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 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); } } } 

Puede usar la focusedProperty de Node para adjuntar un ChangeListener .

Extendiendo la respuesta de Brendan: de JavaFX8 (como viene con Java 8), una expresión lambda combinada con un operador ternario puede hacerlo realmente compacto:

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