带有JUNG和Java的MouseeEvents

带有JUNG和Java的MouseeEvents,java,jung,Java,Jung,我在Java with JUNG程序中制作了一个PluggableGraphMouse和两个EditingGraphMouse插件。如果我将修改器设置为“左键单击”和“右键单击”,则效果非常好,下面是setModifiers代码: ovalMouse.setModifiers(MouseEvent.BUTTON1_MASK); circleMouse.setModifiers(MouseEvent.BUTTON3_MASK); 但是,我想让左键单击做一件事,SHIFT+左键单击(而不是右键单击

我在Java with JUNG程序中制作了一个PluggableGraphMouse和两个EditingGraphMouse插件。如果我将修改器设置为“左键单击”和“右键单击”,则效果非常好,下面是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用于圆环鼠,请让我知道。谢谢。

要在任何
JUNG2
的xxxGraphMousePlugin鼠标事件中过滤Shift+按钮3,该鼠标事件实现
鼠标侦听器

    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
下:

  • 使用SHIFT键:按
    SHIFT+BUTTON3
    (SHIFT键+右键单击鼠标按钮)将显示“BUTTON3”和“SHIFT+BUTTON3”消息

  • 除SHIFT键外:按
    任意键+按钮3
    (任意键+右键单击鼠标按钮)将仅显示“按钮3”消息


  • 要在任何
    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
    下:

  • 使用SHIFT键:按
    SHIFT+BUTTON3
    (SHIFT键+右键单击鼠标按钮)将显示“BUTTON3”和“SHIFT+BUTTON3”消息

  • 除SHIFT键外:按
    任意键+按钮3
    (任意键+右键单击鼠标按钮)将仅显示“按钮3”消息


  • 隐马尔可夫模型。。。我不知道这对我说实话有什么帮助。您已经编写了一个布尔语句来检查修饰符是什么,我的问题是使用int语句来设置修饰符。如果我写circleMouse.setModifiers(MouseEvent.BUTTON1\u MASK和MouseEvent.SHIFT\u MASK);那不正确。有人知道要让它工作所需的setModifiers行是什么,而不是getModifiers行吗?事实上,从我自己的测试中,我看不出
    JUNG
    对MouseEvent的
    setModifiers(int)
    有什么影响。在我的测试中,修饰符将接受一个
    int
    值,其中该值是您感兴趣的一个或多个
    MouseEvent
    常量的组合。例如:
    MouseEvent.SHIFT_MASK(0x1)| MouseEvent.BUTTON3_MASK(0x4)=0x5
    当选择从MouseEvent的
    getModifiers()
    获取的元键
    SHIFT+BUTTON3
    时,将为真。请参阅我的更新以进行总结:您需要使用按位或“|”而不是按位和“&”来组合掩码。嗯。。。我不知道这对我说实话有什么帮助。您已经编写了一个布尔语句来检查修饰符是什么,我的问题是使用int语句来设置修饰符。如果我写circleMouse.setModifiers(MouseEvent.BUTTON1\u MASK和MouseEvent.SHIFT\u MASK);那不正确。有人知道要让它工作所需的setModifiers行是什么,而不是getModifiers行吗?事实上,从我自己的测试中,我看不出
    JUNG
    对MouseEvent的
    setModifiers(int)
    有什么影响。在我的测试中,修饰符将接受一个
    int
    值,其中该值是您感兴趣的一个或多个
    MouseEvent
    常量的组合。例如:
    MouseEvent.SHIFT_MASK(0x1)| MouseEvent.BUTTON3_MASK(0x4)=0x5
    当选择从MouseEvent的
    getModifiers()
    获取的元键
    SHIFT+BUTTON3
    时,将为真。请参阅我的更新以进行总结:您需要使用按位或“|”而不是按位和“&”来组合掩码。