我为Pane设置了一个监听器,以便它将检测到鼠标左键和右键处于按下状态。
但是,当我按住鼠标左键,然后再按一下右键时,先前的操作似乎就失去了效果!

我的代码:

root.setOnMouseDragged(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent t) {
        if(t.getButton() == MouseButton.PRIMARY) f1();
        if(t.getButton() == MouseButton.SECONDARY) f2();
    }
});

在持有LMB的同时,我正在运行f1(),但是当我按下RMB时,似乎新事件完全覆盖了前一个事件:仅运行f2()

如何区分这两个事件?

最佳答案

getButton()一次只能返回一个值。这是最新按下的按钮。如果需要检测多个鼠标按下的情况,则需要使用相应的功能:

root.setOnMouseDragged(new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent t) {
        if (t.isPrimaryButtonDown()) {
            System.out.println("rockets armed");
        }
        if (t.isSecondaryButtonDown()) {
            System.out.println("autoaim engaged");
        }
    }
});

关于mouseevent - 如何正确检测JavaFX中哪些鼠标按钮按下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12816847/

10-12 05:20