1

我使用 JUNG 程序在我的 Java 中制作了 PluggableGraphMouse 和 2 EditingGraphMousePluggings。如果我将修饰符设置为左键单击并右键单击它可以正常工作,这里是 setModifiers 代码:

ovalMouse.setModifiers(MouseEvent.BUTTON1_MASK);
circleMouse.setModifiers(MouseEvent.BUTTON3_MASK);

但是,我想要的是左键单击做一件事,而 SHIFT + 左键单击(而不是右键单击)做另一件事。我已经尝试了所有我能想到的组合,但我似乎无法让它发挥作用。以下是我尝试过的一些无效的更合乎逻辑的组合:

//My logic here is Button1 AND Shift is down but this doesn't work
circleMouse.setModifiers(MouseEvent.BUTTON1_MASK & MouseEvent.SHIFT_DOWN_MASK);

// My logic here is Button1 AND Shift but this doesn't work either
circleMouse.setModifiers(MouseEvent.BUTTON1_MASK & MouseEvent.SHIFT_MASK);

// Also tried InputEvents but those didn't work either
circleMouse.setModifiers(InputEvent.BUTTON1_DOWN_MASK & InputEvent.SHIFT_DOWN_MASK);

如果有人知道正确的修饰符是什么,那么我可以将按钮 1 用于椭圆鼠标,将按钮 1 + shift 用于圆形鼠标,请告诉我。谢谢。

4

1 回答 1

1

在任何JUNG2实现的 xxxGraphMousePlugin 鼠标事件中过滤 Shift+Button3 MouseListener

    System.out.println(circleMouse.getModifiers());
    if (( circleMouse.getModifiers() & (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)) == (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)){
        System.out.println(MouseEvent.getMouseModifiersText(circleMouse.getModifiers()));
    }

更新

因此,如果您想区分BUTTON3和之间的鼠标事件SHIFT+BUTTON3,以下测试将向您展示:

graphMouse.add(new MyPopupGraphMousePlugin());

protected class MyPopupGraphMousePlugin extends AbstractPopupGraphMousePlugin
implements MouseListener {

    @Override
    protected void handlePopup(MouseEvent e) {
        boolean filtered1 = false;
        boolean filtered2 = false;

        System.out.println(e.getModifiers());
        if (( e.getModifiers() & (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)) == (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)){
            filtered1 = true;
        }
        if (( e.getModifiers() & (MouseEvent.BUTTON3_MASK)) == (MouseEvent.BUTTON3_MASK)){
            filtered2 = true;
        }

        if(filtered2 == true) {
            System.out.println("BUTTON3");
        }
        if(filtered1 == true) {
            System.out.println("SHIFT+BUTTON3");
            //or do something more useful like pop up a JPopupMenu
        }       
    }
}

在上面的测试中JUNG2

  1. 使用 SHIFT 键:按下SHIFT+BUTTON3(SHIFT 键 + 鼠标右键)将同时显示“BUTTON3”和“SHIFT+BUTTON3”消息

  2. 除了 SHIFT 键:按下any key + BUTTON3(任意键 + 鼠标右键)只会显示“BUTTON3”消息

于 2011-05-11T13:17:30.593 回答