Как избежать нежелательного события прокрутки мыши и выполнить код после задержки - PullRequest
0 голосов
/ 24 октября 2018

Пожалуйста, проверьте следующий фрагмент

dashboard.addMouseWheelListener(new MouseWheelListener() {          
            @Override
            public void mouseScrolled(org.eclipse.swt.events.MouseEvent mouseEvent) {
                //doSomething
            }
        });

Это вызовет mouseEvent на Scroll.Проблема в том, что это вызовет событие более 10 раз для одной прокрутки.

1, Как получить только последнее событие, с задержкой в ​​1 сек.Пытался выяснить, используя Timer и ScheduledExecutorService, но не смог получить исправление.

2, также через 1 секунду, если я прокручиваю снова, это должно работать

1 Ответ

0 голосов
/ 25 октября 2018

Я сделал что-то вроде этого

private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> scheduledFuture;
dashboard.addMouseWheelListener(new MouseWheelListener() {          
   @Override
   public void mouseScrolled(org.eclipse.swt.events.MouseEvent mouseEvent) {
    //for canceling previously scheduled.
    if(scheduledFuture != null)
        scheduledFuture.cancel(false);
    scheduledFuture  = executor.schedule(task, 1000, TimeUnit.MILLISECONDS);    
   }
});

dashboard.addDisposeListener(new DisposeListener() {    
  @Override
  public void widgetDisposed(DisposeEvent arg0) {
    executor.shutdownNow();                         
  }
});

 Callable task = () -> {                
    Platform.runLater(() -> {
      //do something
    });                                                         
 return null;
 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...