Как определить, когда ScrollPane заканчивает прокрутку

Я хочу определить, когда ScrollPane завершает прокрутку в моем приложении, чтобы отключить некоторые триггеры при перемещении, чем помочь сделать пользовательский интерфейс немного чище. Я нашел триггер, когда он движется, но я не могу найти триггер или способ определить, когда он останавливается

scrollPane.vvalueProperty().addListener(new ChangeListener<Number>() {
          @Override
          public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
              if (oldValue!=newValue) {
                  isScrolling = true;
              } else {
                  isScrolling = false;
              }
          }
        }); 

ChangeListeners уведомляются только в том случае, если значение изменилось, поэтому вы никогда не дойдете до блока else (как вы заметили;). Не совсем понимаете, что вам нужно, предоставьте минимальный воспроизводимый пример, который демонстрирует проблему.

kleopatra 13.09.2018 10:40

Очевидно, я знаю, что проблема в том, что нет слушателя или быстрого способа доступа к точной точке остановки, как это есть для обнаружения изменения. Принятый ответ работает, но он немного сложнее, чем метод обнаружения изменения.

mej71 13.09.2018 20:51

тогда зачем вы реализуете этот блок «ничего не делать», если он настолько очевидный, что он никогда не достигается? хотите запутать коллегу?

kleopatra 14.09.2018 09:35

Если у вас нет точного ответа, возможно, не стоит отвечать на вещи просто для придирки :)

mej71 18.09.2018 00:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
334
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет сделать это с помощью внешнего таймера или javafx.animation.Timeline. Используйте шкалу времени, если вы меняете пользовательский интерфейс.

Установите флаг, например lastScrollSeen, как дату и время, и активируйте этот таймер, когда вы впервые получите событие прокрутки. Обновляйте lastScrollSeen каждый раз, когда вы получаете другое событие прокрутки, и через определенные промежутки времени (используя таймер / временную шкалу) проверяйте, прошло ли достаточно времени без дополнительного события прокрутки, чтобы вы могли быть уверены, что пользователь завершил прокрутку.

На этом этапе сделайте свою работу, чтобы отключить триггеры и очистить флаг и таймер.

Другие вопросы по теме