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

时间:2016-04-25 11:34:22

标签: java javafx-8 javafxports gluon-mobile

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

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

以下是问题所在:每次滚动ListView时,对话框都会继续弹出。

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

1 个答案:

答案 0 :(得分: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?