2011-05-11 2 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); 

을 사람이 올바른 수정 그래서 난 주시기 바랍니다 + circleMouse에 대한 이동 ovalMouse 버튼 1 버튼 1을 사용할 수있는 것을 알고있는 경우 : 여기에 작동하지 않습니다 내가 해봤 더 논리적 조합의 일부입니다 나도 알아. 감사. 당신이 BUTTON3을 사이에 마우스 이벤트를 차별화하려는 경우,

그래서

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())); 
    } 

업데이트 :

답변

1

MouseListener을 구현하는 JUNG2의 xxxGraphMousePlugin 마우스 이벤트에서 Shift + 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"메시지

+0

음 ... 그게 내가 정직 해지는 데 도움이되는지 확실하지 않습니다. 수식어가 무엇인지 검사하는 부울 문을 작성했습니다. Im은 수식자를 설정하는 int 문과 관련된 문제입니다. circleMouse.setModifiers (MouseEvent.BUTTON1_MASK & MouseEvent.SHIFT_MASK);를 작성하면, 그건 제대로 발사되지 않습니다. 누구나 getModifiers 행이 아니라 setModifiers 행이 작동하는지 알아야합니다. – fxtdr

+0

사실, JUNG이 내 자신의 테스트에서 MouseEvent의'setModifiers (int) '로 어떤 영향을 미치는지 보지 못합니다. 내 테스트에서, 수식어는 값이 당신이 관심있는 하나 이상의'MouseEvent' 상수의 조합 인'int' 값을 받아 들일 것입니다. 예를 들면 다음과 같습니다 :'MouseEvent.SHIFT_MASK (0x1) | MouseEvent.BUTTON3_MASK (0x4) == 0x5'는 MouseEvent의 getModifiers()에서 얻은 메타 키 'SHIFT + BUTTON3'이 선택 될 때 true가됩니다. 내 업데이트보기 – eee

+0

요약하면 : 비트 OR '|' bitwise AND 대신 '&'를 사용하여 마스크를 결합합니다. –