7

사용자가 왼쪽 마우스 버튼과 오른쪽 마우스 버튼을 동시에 누르는 방법을 구현하고 싶습니다.자바 스윙이 두 마우스 버튼을 모두 누르십시오.

저는 Swing and Java 1.7을 사용하고 있습니다. 나는 이것을 시도했다, 그러나 나는 그것을 기대처럼 모두-버튼의 경우를 감지하지 않습니다

public void mousePressed(MouseEvent e) {  
    if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)){ 
       ///code here 
    } 
} 

내가 방법을 분리하고 마우스 버튼을 누른 여부를 결정하는 부울 값을 사용하려고하고 그때 나는 두 사람이 동시에 누르는 지 알아 내기위한 조건을 설정했으나 그 일은 너무 힘들어졌습니다.

+2

'나는 메서드를 분리하여 bool 값을 사용하여 마우스 버튼을 눌렀는지를 결정한 다음, 동시에 두 버튼을 동시에 눌렀는지 알아 내기 위해 조건을 설정했지만 너무 힘들었습니다 .' 합리적인 접근 방식 같아. 시도한 것을 보여주는 [SSCCE] (http://sscce.org/)를 게시하십시오. – camickr

+0

관심을 가져 주셔서 대단히 감사합니다 ...하지만 아래의 코드 postat는 거의 동일하지만 마우스를 눌렀을 때의 결정은 if (SwingUtilities.isLeftMouseButton (e)) {left = true}를 기반으로했습니다. 그 이상한 일을 ... 이상한 : D –

답변

6

이것은 당신이 원하는 것을 수행하는 SSCCE입니다. .

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class StackOverflow15957076 extends MouseAdapter 
{ 
    private JLabel status; 

    private boolean isLeftPressed; 
    private boolean isRightPressed; 

    public StackOverflow15957076() 
    { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 

     JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER)); 

     status = new JLabel ("waiting for both mouse buttons..."); 

     status.addMouseListener (this); 

     panel.add (status); 

     frame.add (panel); 

     frame.pack(); 
     frame.setVisible (true); 

     isLeftPressed = false; 
     isRightPressed = false; 
    } 

    @Override 
    public void mousePressed (MouseEvent e) 
    { 
     if (SwingUtilities.isLeftMouseButton (e)) 
     { 
      isLeftPressed = true; 
     } 
     else if (SwingUtilities.isRightMouseButton (e)) 
     { 
      isRightPressed = true; 
     } 

     if (isLeftPressed && isRightPressed) 
     { 
      status.setText ("both buttons are pressed"); 
     } 
    } 

    @Override 
    public void mouseReleased (MouseEvent e) 
    { 
     if (SwingUtilities.isLeftMouseButton (e)) 
     { 
      isLeftPressed = false; 
     } 
     else if (SwingUtilities.isRightMouseButton (e)) 
     { 
      isRightPressed = false; 
     } 

     status.setText ("waiting for both mouse buttons..."); 
    } 

    public static void main (String[] args) 
    { 
     SwingUtilities.invokeLater (new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new StackOverflow15957076(); 
      } 
     }); 
    } 
} 
+0

나는 upvoted 했을텐데 당신이 이해하기 쉬운 SwingUtilities.isXXX 방법 (OP에 의해 사용되는) 대신 MouseEvent.BUTTON1/BUTTON3을 사용했습니다. – camickr

+0

대단히 고마워,이게 완벽하게 작동한다. –

+0

@camickr SwingUtilities의 메소드는 더 멋진 추상화이지만, 나는 이것이 같은 기능이라고 생각한다. –

1

마우스 이벤트가 순차적으로 발생하므로 직접 처리 할 수없는 것처럼 보입니다. 예를 들어, this SO question/answers을 참조하십시오.

그래서 "동시에" "이 무엇을 의미하는지 (즉, 시간이 얼마나 가까워 야하는지) 결정해야합니다. 그런 다음 두 개의 개별 이벤트를 캡처하여 getWhen() 값을 비교할 수 있습니다.

관련 문제