JavaFx 13 - Обработчик TableView Vertical ScrollBar возвращает исключение NullPointerException - PullRequest
2 голосов
/ 06 января 2020

Мне нужно обработать событие прокрутки JavaFx13 до дна, но этот код:

   @Override
   public void initialize(URL location, ResourceBundle resources) {
     // ...
     // ScrollBar verticalBar = (ScrollBar) this.emailsTable.lookupAll(".scroll-bar");
        ScrollBar verticalBar = (ScrollBar) this.emailsTable.lookup(".scroll-bar:vertical");
        verticalBar.valueProperty().addListener((obs, oldValue, newValue) -> { // <-- Line 49
             // if (verticalBar.getOrientation() != Orientation.VERTICAL) return;
            if (newValue.doubleValue() >= verticalBar.getMax()) {
                System.out.println("BOTTOM!");
            }
        });
     // ...
   }

... возвращает эту ошибку при F XML load:

Caused by: java.lang.NullPointerException
at it.unito.prog.views.MainView.initialize(MainView.java:49)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
... 19 more

1 Ответ

4 голосов
/ 06 января 2020

Вы можете прокрутить, используя tableView.scrollTo(), чтобы перейти к индексу или указанному элементу c.

Чтобы получить уведомление о прокрутке, вы можете использовать tableView.setOnScrollTo().

Не использовать поиск для этой задачи

Полоса прокрутки отображается только при необходимости. Это может быть или не быть там, когда вы посмотрите на это.

Если вы попытаетесь использовать lookup() полосу прокрутки перед добавлением элементов в представление таблицы или перед добавлением представления таблицы в сцену, или до того, как сцена подверглась визуализации пройти, полоса прокрутки почти наверняка не будет там. Если полосы прокрутки нет, когда вы пытаетесь найти ее, то метод поиска вернет нулевое значение (что вы и видите). Даже если при первом поиске есть полоса прокрутки, она может быть впоследствии удалена, а при необходимости добавлена ​​новая, поэтому ваша исходная ссылка в итоге станет недействительной. Поэтому я не рекомендую ваш подход на основе поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...