【问题标题】:How to disable setOnMouseClicked while scrolling in JavaFX ListView如何在 JavaFX ListView 中滚动时禁用 setOnMouseClicked
【发布时间】:2016-04-25 11:34:22
【问题描述】:

我开发了一个小型 Javafx 应用程序并部署在我的 Android 设备中,我有一个 ListView,其配置如下:

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

问题出在:每次我滚动ListView时,对话框都会不断弹出。

问题:如何在滚动时禁用setOnMouseClicked

【问题讨论】:

    标签: java javafx-8 javafxports gluon-mobile


    【解决方案1】:

    当您滚动ListView 时,滑动手势会触发鼠标拖动事件。当检测到拖动事件时,您可以设置一个标志,并使用以下鼠标单击事件。

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

    另一种可能是您使用 Gluon 的 CharmListView,它自己处理鼠标单击事件,但(直到现在)不像标准 ListView 那样方便使用,例如当您需要访问SelectionModel 时,您可以在这个问题中看到:CharmListView SelectedItemProperty?

    【讨论】:

    • 您好,感谢您的回答,如何将您的代码集成到我上面的代码中? ;)
    • 您可以在视图控制器的initialize() 方法中调用它:new ScrollListener(listView);。另外请记住,如果您需要关注资源,则必须删除 eventHandlers / 过滤器。
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多