Я реализую логику автозаполнения в Javafx. TextField
- для ввода данных пользователем, и каждый раз, когда он обновляется, слушатель срабатывает. И тогда выпадающее меню, которое является listView
, покажет соответствующие результаты.
Итак, проблема в том, как я могу получить обновленную позицию каретки в TextField
, когда прослушиватель textProperty
находится в процессе?
Я сейчас использую textfield.getCaretPosition()
, но этовернет только предыдущую позицию.
Любые входные данные будут оценены!
commandTextField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldText, String newText) {
// Following line will return previous caret position
commandTextField.getCaretPosition();
...//autocomplete logic omitted
}
});
РЕДАКТИРОВАТЬ: Причина, по которой мне нужно получить позицию каретки, заключается в том, что мне нужнознать позицию, где ввод изменяется, и показывать предложения соответственно.
textField.caretPositionProperty().addListener((ChangeListener<Number>) (observable, oldValue, newValue) -> {
caretPosition = newValue.intValue();
});
textField.textProperty().addListener((ChangeListener<String>) (observable, oldValue, newValue) -> {
...//autocomplete Logic
}
В вышеупомянутом случае сначала будет вызываться прослушиватель textProperty
, а затем caretPositionProperty
, поэтому нет способаполучить обновленную позицию каретки в моем случае.