Функциональность ChangeListener для проверки введенного значения с временной задержкой / или другим решением - PullRequest
0 голосов
/ 01 января 2019

Я ищу функциональность в моем коде, чтобы позволить мне за несколько секунд набрать полное имя в simpleTextField, мне это нужно, потому что, если я набираю, например:

  1. Я печатаю R - тогда метод изменилсявыполняя свою задачу
  2. Я набираю RR - затем метод, измененный, делает то же самое дважды (чего я не хочу)

Так что было бы лучшим способом позволить программе ждать несколько секундтак что у меня есть время, чтобы полностью ввести требуемое значение, тогда метод будет выполняться только один раз

    simpleTextField.textProperty().addListener(new ChangeListener<String>() {

        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {

       // some funtionality to do

     }

1 Ответ

0 голосов
/ 02 января 2019

Используйте PauseTransition, который воспроизводится с начала каждый раз, когда изменяется свойство text TextField.

Следующий код добавляет содержимое TextField в ListViewЧерез 1 секунду после последнего изменения TextField.text:

@Override
public void start(Stage primaryStage) throws Exception {
    TextField text = new TextField();

    ListView<String> list = new ListView<>();

    PauseTransition delay = new PauseTransition(Duration.seconds(1));
    delay.setOnFinished(evt -> {
        list.getItems().add(text.getText());
    });

    // restart delay every time the text is modified
    text.textProperty().addListener((o, oldValue, newValue) -> delay.playFromStart());

    VBox root = new VBox(text, list);

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();
}

Возможно, вы захотите добавить другого слушателя в свойство anchor, чтобы также обрабатывать изменения выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...