2016-04-25 2 views
0

J'ai développé une petite application JavaFX et déployée dans mon appareil Android, j'ai un ListView qui est configuré comme ceci:Comment désactiver setOnMouseClicked pendant le défilement dans JavaFX ListView

stuboutList.setOnMouseClicked(new EventHandler<MouseEvent>(){ 
    @Override 
    public void handle(MouseEvent event) { 
     Dialog.show("You click the ListView!"); 
    } 
}); 

Voici le problème: Chaque temps je fais défiler le ListView le Dialog continuera à éclater.

QUESTION: Comment désactiver setOnMouseClicked en SCROLLING?

Répondre

1

Lorsque vous faites défiler un ListView, le geste de balayage déclenche un événement de déplacement de la souris. Vous pouvez définir un indicateur lorsque l'événement de déplacement est détecté et utiliser l'événement de clic souris suivant.

public class ScrollListener { 

    private BooleanProperty scrolling; 

    public ScrollListener(Node observableNode) { 
     scrolling = new ReadOnlyBooleanWrapper(false); 

     observableNode.addEventHandler(MouseEvent.DRAG_DETECTED, e -> scrolling.set(true)); 

     observableNode.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> { 
      if (scrolling.get()) { 
       scrolling.set(false); 
       evt.consume(); 
      } 
     }); 

     observableNode.addEventHandler(MouseEvent.MOUSE_EXITED, e -> scrolling.set(false)); 
    } 

    public ReadOnlyBooleanProperty scrollingProperty() { 
     return scrolling; 
    } 

    public boolean isScrolling() { 
     return scrolling.get(); 
    } 
} 

Une autre possibilité est d'utiliser CharmListView de gluons, qui prend soin de la souris sur l'événement lui-même, mais (jusqu'à présent) ne soit pas aussi conveniend à utiliser comme ListView standard, par exemple Lorsque vous avez besoin d'accéder à la SelectionModel, comme vous pouvez le voir dans cette question: CharmListView SelectedItemProperty?

+0

Salut, merci pour la réponse, comment puis-je intégrer votre code à mon code ci-dessus? ;) –

+0

Vous pouvez l'appeler dans la méthode 'initialize()' du contrôleur de vue: 'new ScrollListener (listView);'. Gardez également à l'esprit que vous devez supprimer eventHandlers/filter si vous devez vous préoccuper des ressources. – jns