2016-04-25 18 views
0

私は小さなJavaFXアプリケーションを開発し、Androidデバイスに展開しながら、setOnMouseClickedを無効にする方法を、私はこのような何かを設定されているListViewを持っています。ここでは のJavaFX ListViewコントロールにスクロール

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

が問題です:すべて私が ListView をスクロールすると、はポップアップし続けるでしょう。

QUESTION:を無効にする方法は、スクロールしながらをsetOnMouseClicked?

答えて

1

ListViewをスクロールすると、スワイプジェスチャがマウスドラッグイベントをトリガします。ドラッグイベントが検出されたときにフラグを設定し、次のマウスクリックイベントを使用することができます。あなたは(今まで)は、独自のイベントをクリックして、マウスの世話をするが、グルーオンのCharmListViewは、例えば標準ListViewとして使用するconveniend、通りではありません使用に

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

別のpossiblityですCharmListView SelectedItemProperty?

+0

こんにちは、答えをありがとう、あなたのコードを上記のコードに統合するにはどうすればよいですか?この質問に表示されるように、SelectionModelにアクセスする必要がある場合は、 ;) –

+0

View Controllerの 'initialize()'メソッドで呼び出すことができます: 'new ScrollListener(listView);'。また、リソースを気にする必要がある場合は、eventHandlers/filterを削除する必要があります。 – jns

関連する問題