Вызывающий изменения значения для 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());
}
});