Adi*_*dil 15 java javafx-2 fxml
我使用JavaFX 2.1并使用FXML创建了GUI,在我添加的GUI的控制器中myTextField.requestFocus();.
但我总是把焦点放在另一个控件上.
Ser*_*nev 50
在initialize()控制时尚未准备好处理焦点.
你可以尝试下一个技巧:
@Override
public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(new Runnable() {
@Override
public void run() {
tf.requestFocus();
}
});
}
Run Code Online (Sandbox Code Playgroud)
对于棘手的复杂应用程序(如评论中的Pavel_K),您可能需要多次重复此例程并调用方法行下一个:
private void repeatFocus(Node node) {
Platform.runLater(() -> {
if (!node.isFocused()) {
node.requestFocus();
repeatFocus(node);
}
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是未记录的方法,如果在未来的Java版本中发生更改或损坏,可以明智地添加重复限制以避免无限循环.最好是失去焦点而不是整个应用程序.:)
与@Sergey Grinev完全相同的答案.确保您的Java版本是最新的(JDK 1.8或更高版本).
Platform.runLater(()->myTextField.requestFocus());
Run Code Online (Sandbox Code Playgroud)
如果你requestFocus(); 初始化场景后,它会工作!
像这样:
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();
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.:)