2011-05-11 39 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