Выбор слова в TextField - PullRequest
       9

Выбор слова в TextField

1 голос
/ 15 февраля 2012

Следующий код должен выбирать слово в JavaFX TextField:

public class NewFXMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        final TextInputControl textField = new TextField("Hello World, World!");

        Button button = new Button("select");
        button.setOnAction(new EventHandler<ActionEvent>() {

            public void handle(ActionEvent t) {
                textField.positionCaret(0);
                textField.selectNextWord();

                System.out.println(textField.getSelectedText());
            }
        });

        VBox root = new VBox();
        root.getChildren().add(textField);
        root.getChildren().add(button);
        primaryStage.setScene(new Scene(root, 300, 100));
        primaryStage.show();
    }
}

В консоли печатается Hello, однако в интерфейсе ничего не выделено (выделено). Если сделать то же самое с TextArea, текст будет выбран правильно.

(Неправильный) результат с TextField:

enter image description here

И (правильный) результат с TextArea:

enter image description here

Что происходит?!?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

TextField не показывает выбор, если у него нет фокуса (хотя я не уверен, что это ошибка или особенность). Вы можете увидеть выбор, используя следующий код:

    button.setOnAction(new EventHandler<ActionEvent>() {

        public void handle(ActionEvent t) {
            textField.requestFocus(); // get focus first
            textField.positionCaret(0);
            textField.selectNextWord();

            System.out.println(textField.getSelectedText());
        }
    });
1 голос
/ 18 февраля 2012

Ответ на этот вопрос заключается в том, что наше понимание нативных элементов управления в этом отношении заключается в том, что они оба очищают выделение, когда текстовое поле теряет фокус, и что они (как правило) выделяют весь текст при получении фокуса.Наше намерение с элементами управления пользовательским интерфейсом в JavaFX состояло в том, чтобы иметь родной вид, но настроенный вид.Конечно, мы можем изменить свое мнение о том, как это работает, но оно должно быть сбалансировано с целью сохранения нативного ощущения (которое включает выбор всего на полученном фокусе и не показывает выбор на потерянном фокусе, даже если выбор существует.Но так как нет никакого смысла в том, чтобы иметь какой-либо выбор на потерянном фокусе, если он просто собирается выбирать все на полученном фокусе, и поскольку в результате все еще будут существовать странные крайние случаи, мы должны задаться вопросом, стоит ли это менять).

...