Uso JavaFX 2.1 y creé GUI usando FXML, en el controlador de esta GUI agregué myTextField.requestFocus();
.RequestFocus en TextField no funciona
Pero siempre me enfoco en el otro control.
Uso JavaFX 2.1 y creé GUI usando FXML, en el controlador de esta GUI agregué myTextField.requestFocus();
.RequestFocus en TextField no funciona
Pero siempre me enfoco en el otro control.
En el momento de initialize()
los controles todavía no están listos para manejar el enfoque.
Puede probar siguiente truco:
@Override
public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(new Runnable() {
@Override
public void run() {
tf.requestFocus();
}
});
}
Para aplicaciones complejas difíciles (como Pavel_K tiene en los comentarios) es posible que desee repetir esta rutina varias veces y llamar a la línea método siguiente:
private void repeatFocus(Node node) {
Platform.runLater(() -> {
if (!node.isFocused()) {
node.requestFocus();
repeatFocus(node);
}
});
}
Tenga en cuenta que se trata de un enfoque no documentado y tal vez sea aconsejable agregar un límite para las repeticiones para evitar ciclos infinitos si algo cambia o se rompe en futuras versiones de Java. Mejor perder el foco que una aplicación completa. :)
Si solicitaFocus(); DESPUÉS de inicializar la escena, ¡funcionará!
De esta manera:
Stage stage = new Stage();
GridPane grid = new GridPane();
//... add buttons&stuff to pane
Scene scene = new Scene(grid, 800, 600);
TEXTFIELD.requestFocus();
stage.setScene(scene);
stage.show();
espero que esto ayude. :)
La misma respuesta que @Sergey Grinev. Asegúrese de que su versión de Java esté actualizada (JDK 1.8 o posterior).
Platform.runLater(()->myTextField.requestFocus());
esto funciona para mí, ¡Gracias! – Adil
Tuve un problema un tanto relacionado, mi 'TextArea' se negó a obtener el foco mediante programación aunque el escenario estuviera visible y activo ** y ** el hilo en ejecución actual fuera el hilo de la aplicación JavaFX. Pero si seguí el ejemplo y en cola un nuevo 'Runnable' funcionó. Realmente extraño, no tengo palabras para eso. –
Esto ya no parece funcionar con JavaFX 8. 'tf == null' sigue siendo cierto en el momento en que se ejecuta' initialize'. – skiwi