Как проверить, была ли нажата кнопка ВНИЗ в последней строке в ListView - PullRequest
0 голосов
/ 03 июля 2019

Я использую JavaFX 12 и, пытаясь проверить его в компоненте ListView, пользователь нажал клавишу ВНИЗ в последней строке (или соответственно клавишу ВВЕРХ в первой строке).

Я протестировал следующие обработчики событий, и результаты:

  1. изменение выбора: не срабатывает, если ВНИЗ на последнем ряду
  2. KeyTyped не срабатывает на клавиши ВНИЗ и ВВЕРХ
  3. 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 также запускался, если не было произведено никакого действительного изменения (при этом старые и новые индексы имели одинаковое значение).

Минимальное работоспособное приложение здесь

Есть ли решение этой проблемы?

...