TextField中的RequestFocus不起作用

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版本中发生更改或损坏,可以明智地添加重复限制以避免无限循环.最好是失去焦点而不是整个应用程序.:)


Sed*_*ick 9

与@Sergey Grinev完全相同的答案.确保您的Java版本是最新的(JDK 1.8或更高版本).

Platform.runLater(()->myTextField.requestFocus());
Run Code Online (Sandbox Code Playgroud)


cod*_*leb 8

如果你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)

我希望这有帮助.:)