如何在 JavaFX ListView 中滚动时禁用 setOnMouseClicked

How to disable setOnMouseClicked while scrolling in JavaFX ListView

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

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

问题是: 每次我滚动 ListView 时,Dialog 都会不断弹出。

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

当您滚动 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 时,您可以在这个问题中看到: