Вызывающий изменения значения для JavaFX TextField

Я хотел бы добавить своего listener в мой JavaFX TextField, который когда пользователь меняет значение TextField, приложение печатает что-то на консоли.

Я искал, и я нашел следующий очень похожий вопрос: Слушатель изменения значения в JTextField

Ответ на указанный вопрос очень ясен и эффективен, но, к сожалению, он полезен только для JTextField (Not JavaFX TextField), потому что он говорит, что вы должны использовать DocumentListener следующим образом:

// Listen for changes in the text
textField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
    warn();
  }
  public void removeUpdate(DocumentEvent e) {
    warn();
  }
  public void insertUpdate(DocumentEvent e) {
    warn();
  }

но в JavaFX TextFields вы не сможете этого сделать. Так? Каково решение?

(описание кода может быть очень хорошим, но если это невозможно, любой намек будет оценен)

Ответы

Ответ 1

Добавить прослушиватель в TextField textProperty:

TextField textField = new TextField();
textField.textProperty().addListener((observable, oldValue, newValue) -> {
    System.out.println("textfield changed from " + oldValue + " to " + newValue);
});

Ответ 2

Вы также можете использовать:

textField.setOnKeyReleased(event -> {
    System.out.println(textField.getText());
});

РЕДАКТИРОВАТЬ: это обнаруживает KeyEvents, т.е. только когда задействована клавиатура. Он не работает для событий вставки правой кнопкой мыши.

Вы также можете отфильтровать KeyEvents из Ctrl, Alt и т.д. (Например, при использовании Ctrl + V для вставки), выполнив:

textField.setOnKeyReleased(event -> {
    if (!event.getCode().isModifierKey()) {
        System.out.println(textField.getText());
    }
});