2016-04-25 9 views
0

ich eine kleine JavaFX-Anwendung entwickelt und in meinem Android-Gerät im Einsatz, ich habe ein ListView, das ungefähr so ​​konfiguriert ist:Wie setOnMouseClicked zu deaktivieren, während in JavaFX Listview Scrollen

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

Hier ist das Problem: Jeder Zeit scrolle ich die ListViewDialog wird weiter knallen.

FRAGE: Wie deaktivieren setOnMouseClicked während SCROLLING?

Antwort

1

Wenn Sie eine ListView scrollen, löst die Wischgeste ein Mausereignis aus. Sie können ein Flag festlegen, wenn das Ziehereignis erkannt wird, und das folgende Mausklick-Ereignis konsumieren.

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(); 
    } 
} 

Eine andere Möglichkeit ist es, Sie Gluon die Verwendung CharmListView, die Pflege der Mausklick-Ereignis auf seinem eigenen nimmt, aber (bisher) nicht als conveniend ist als Standard ListView zu verwenden, z.B. Wenn Sie auf die SelectionModel zugreifen müssen, wie Sie in dieser Frage sehen können: CharmListView SelectedItemProperty?

+0

Hallo, danke für die Antwort, wie kann ich Ihren Code zu meinem Code oben integrieren? ;) –

+0

Sie könnten es in der Methode 'initialize()' des View-Controllers aufrufen: 'new ScrollListener (listView);'. Denken Sie auch daran, dass Sie den eventHandlers/filter entfernen müssen, wenn Sie sich um Ressourcen kümmern müssen. – jns