Ich benutze JavaFX 2.1 und ich erstellte GUI mit FXML, in der Steuerung dieser GUI habe ich myTextField.requestFocus();
hinzugefügt.RequestFocus in TextField funktioniert nicht
Aber ich bekomme immer den Fokus in der anderen Kontrolle.
Ich benutze JavaFX 2.1 und ich erstellte GUI mit FXML, in der Steuerung dieser GUI habe ich myTextField.requestFocus();
hinzugefügt.RequestFocus in TextField funktioniert nicht
Aber ich bekomme immer den Fokus in der anderen Kontrolle.
Zum Zeitpunkt der initialize()
Steuerelemente sind noch nicht bereit, Fokus zu behandeln.
Sie können nächsten Trick versuchen:
@Override
public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(new Runnable() {
@Override
public void run() {
tf.requestFocus();
}
});
}
Für schwierige komplexe Anwendungen (wie Pavel_K in den Kommentaren hat), können Sie diese Routine mehrmals und Call-Methode Linie wiederholen nächsten:
private void repeatFocus(Node node) {
Platform.runLater(() -> {
if (!node.isFocused()) {
node.requestFocus();
repeatFocus(node);
}
});
}
Beachten Sie, dass dies kein undokumentierter Ansatz ist und es möglicherweise ratsam ist, ein Limit für Wiederholungen hinzuzufügen, um eine Endlosschleife zu vermeiden, wenn sich in zukünftigen Java-Versionen etwas geändert hat oder ein Fehler aufgetreten ist. Lieber den Fokus verlieren als eine ganze App. :)
Wenn Sie anfordernFocus(); Nach der Initialisierung der Szene wird es funktionieren!
So:
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();
Ich hoffe, das hilft. :)
Die exakt gleiche Antwort wie @Sergey Grinev. Stellen Sie sicher, dass Ihre Version von Java auf dem neuesten Stand ist (JDK 1.8 oder höher).
Platform.runLater(()->myTextField.requestFocus());
das funktioniert für mich, Danke! – Adil
Ich hatte ein etwas verwandtes Problem, mein 'TextArea' weigerte sich, den Fokus programmgesteuert zu erhalten, obwohl die Bühne sichtbar und aktiv war ** und ** der aktuell laufende Thread der JavaFX-Anwendungsthread war. Aber wenn ich dem Beispiel gefolgt bin und ein neues 'Runnable' eingereiht habe, hat es funktioniert. Wirklich seltsam, ich habe keine Worte dafür. –
Dies scheint nicht mehr mit JavaFX 8 zu funktionieren. 'Tf == null' ist immer noch wahr, wenn' initialize' ausgeführt wird. – skiwi