2011-05-11 79 views
1

我用JUNG程序在Java中制作了PluggableGraphMouse和2个EditingGraphMousePluggings。如果我设置的调节剂要留给点击右键单击它工作完全正常,这里是setModifiers代码:JUNG和Java的MouseEvents

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 ovalMouse和按钮1 +转移为circleMouse请让我知道。谢谢。

回答

1

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

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+BUTTON3(SHIFT键+右击鼠标按钮)会同时显示 “BUTTON3” 和 “SHIFT + BUTTON3”消息

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

+0

嗯......不知道这是如何帮助我说实话。你写了一个布尔语句来检查修饰符是什么,Im的问题是用int语句来设置修饰符。如果我写circleMouse.setModifiers(MouseEvent.BUTTON1_MASK&MouseEvent.SHIFT_MASK);这不会正确启动。有没有人知道setModifiers行是需要什么来获得它的工作,而不是getModifiers行。 – fxtdr 2011-05-11 21:16:26

+0

实际上,我没有看到'JUNG'会对我自己的测试中的MouseEvent的setModifiers(int)做任何影响。在我的测试中,修饰符将接受一个“int”值,其中该值是您感兴趣的一个或多个MouseEvent常量的组合。例如:'MouseEvent.SHIFT_MASK(0x1)| MouseEvent.BUTTON3_MASK(0x4)== 0x5'将在true时选择meta key'SHIFT + BUTTON3',从MouseEvent的getModifiers()获得。请参阅我的更新 – eee 2011-05-12 12:28:00

+0

总结:您需要使用按位或'|'而不是按位与'''来组合面具。 – 2011-05-12 16:40:03