Я использую JavaFX 12 и, пытаясь проверить его в компоненте ListView, пользователь нажал клавишу ВНИЗ в последней строке (или соответственно клавишу ВВЕРХ в первой строке).
Я протестировал следующие обработчики событий, и результаты:
- изменение выбора: не срабатывает, если ВНИЗ на последнем ряду
- KeyTyped не срабатывает на клавиши ВНИЗ и ВВЕРХ
- KeyReleased и KeyPressed возвращают индекс строки после перехода выбора или последнюю строку, если выбор был в последней строке. И это именно та проблема, поскольку о последней строке сообщается при нажатии кнопки DOWN как в последней, так и в последней строке 1.
ListView<String> lstPDOs = new ListView<String>(FXCollections.observableArrayList("Item1", "Item2", "Item3"));
lstPDOs.setEditable(true);
lstPDOs.getSelectionModel().selectedIndexProperty().addListener(e -> {
System.out.println("Selection:" + e);
});
lstPDOs.setOnKeyTyped(e -> {
System.out.println("Key typed:" + lstPDOs.getSelectionModel().getSelectedIndex());
});
lstPDOs.setOnKeyReleased(e -> {
System.out.println("Key released:" + lstPDOs.getSelectionModel().getSelectedIndex());
});
lstPDOs.setOnKeyPressed(e -> {
System.out.println("Key pressed:" + lstPDOs.getSelectionModel().getSelectedIndex());
});
Мне бы хотелось, чтобы либо KEYDOWN запускался до фактического перехода, либо ChangeEvent также запускался, если не было произведено никакого действительного изменения (при этом старые и новые индексы имели одинаковое значение).
Минимальное работоспособное приложение здесь
Есть ли решение этой проблемы?