RequestFocus в TextField не работает

Я использую JavaFX 2.1, и я создал графический интерфейс с использованием FXML, в контроллере этого графического интерфейса я добавил myTextField.requestFocus();.

Но я всегда получаю фокус в другом контроле.

Ответ 1

Во время initialize() элементы управления еще не готовы обрабатывать фокус.

Вы можете попробовать следующий трюк:

@Override
public void initialize(URL url, ResourceBundle rb) {
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            tf.requestFocus();
        }
    });
}

Для сложных сложных приложений (например, Pavel_K в комментариях) вы можете повторить эту процедуру несколько раз и вызвать следующую линию методов:

private void repeatFocus(Node node) {
    Platform.runLater(() -> {
        if (!node.isFocused()) {
            node.requestFocus();
            repeatFocus(node);
        }
    });
}

Ответ 2

Если вы запрашиваетеFocus(); ПОСЛЕ инициализации сцены это сработает!

Вот так:

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

Надеюсь, это поможет.:)

Ответ 3

Точно такой же ответ, как @Sergey Grinev. Убедитесь, что ваша версия java обновлена ​​(JDK 1.8 или новее).

Platform.runLater(()->myTextField.requestFocus());