0

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

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

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

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

4

1 回答 1

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's CharmListView,它自己处理鼠标单击事件,但(直到现在)不像标准那样方便使用ListView,例如当您需要访问时SelectionModel,正如您在这个问题中看到的那样: CharmListView SelectedItemProperty?

于 2016-04-25T12:02:19.207 回答