2010-01-05 12 views
14

재미있게 Java에서 지뢰 찾기 복제본을 작성하려고합니다. 나는 위험 수, 깃발 등을 나타 내기 위해 레이블이 바뀌는 JButton 그리드를 가지고있다.JButton을 마우스 오른쪽 버튼으로 클릭

내 문제는 버튼을 우클릭하기 위해 JButton을 오른쪽 클릭하는 법을 모르겠다. 나는 다음을했다.

button.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e){ 
     boolean mine = field.isMine(x, y); 
     if (e.isPopupTrigger()) { 
      button.setText("F"); 
     } 
     else { 
      if (mine) { 
       button.setText("X"); 
      } 
     } 
    } 
}); 

이것은 전혀 작동하지 않는 것 같다. "F"는 절대로 표시되지 않고 "X"부분 만 표시됩니다. 하지만 더 중요한 것은 버튼을 누르는 데는 아무런 효과가 없다는 것입니다.

편집 : Mac의 경우 mouseClick이 아닌 mousePress에서 팝업 트리거가 발생합니다.

편집 :

button.addMouseListener(new MouseAdapter(){ 
      boolean pressed; 

      @Override 
      public void mousePressed(MouseEvent e) { 
       button.getModel().setArmed(true); 
       button.getModel().setPressed(true); 
       pressed = true; 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       //if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true)); 
       button.getModel().setArmed(false); 
       button.getModel().setPressed(false); 

       if (pressed) { 
        if (SwingUtilities.isRightMouseButton(e)) { 
         button.setText("F"); 
        } 
        else { 
         button.setText("X"); 
        } 
       } 
       pressed = false; 

      } 

      @Override 
      public void mouseExited(MouseEvent e) { 
       pressed = false; 
      } 

      @Override 
      public void mouseEntered(MouseEvent e) { 
       pressed = true; 
      }      
     }); 
     add(button); 

Minesweeper clone http://grab.by/1y9z

+0

입니다 그리고 네 나는 최종 보드가 표시된 모든 그 숫자가 없어야합니다 알고 있습니다. 나는 단지 개발 중이다. – I82Much

+0

무엇이'popupTrigger' 물건을 필요로합니까? 이벤트 mousePressed를 확인하고 BUTTON1_MASK 또는 BUTTON2_MASK에 대한 이벤트 수정자를 확인하십시오. –

답변

5

마우스 오른쪽 버튼으로 버튼을 누를 수 없습니다.

if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true)); 

의 mouseReleased :

if(needReset) {underlyingButton.getModel().setPressed(false)); 

또는 거기에 어떤 희망을 마우스를 수신기

의 mousePressed에 같은 라인을 추가합니다.

+0

나는 이것을 오늘 밤 시험 할 것이다. 가장 유망 해 보인다. – I82Much

+1

시각적 신호가 제대로 작동하려면 setPressed() 전에 setArmed()를 호출해야합니다. – I82Much

1

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/MouseEvent.html

된 MouseEvent는 일부 속성 다른 사람의 사이에서

static int BUTTON1 
static int BUTTON2 
static int BUTTON3 

있습니다 여기에 내가 허용 대답의 기반으로 이루신 솔루션입니다. 당신의 사건이 발발했을 때 그것들을 점검하십시오.

EDIT

공개 INT getButton()

Returns which, if any, of the mouse buttons has changed state. 
+0

고마워, 나는 눌려진 버튼을 얻을 수 있지만 더 이상 내 문제는 아니다. – I82Much

0

오른쪽 클릭에 가시적으로 함몰되는 버튼은 버튼의 "정상적인"동작의 일부가 아니다. JToggleButton을 사용하여 가짜로 만들거나 마우스의 오른쪽 버튼을 누른 상태에서 버튼의 배경색을 변경하거나 경계선을 바꿀 수 있습니다.

4

나는 isPopupTrigger 사용하지만 직접 오른쪽 버튼을 확인하지 않을 다음 button.setText ("F

button.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e){ 
    boolean mine = field.isMine(x, y); 
    if (e.getButton() == MouseEvent.BUTTON2) { 
     button.setText("F"); 
    } 
    ... 
1

"mousePressed"를 확인하면 문제가 해결된다고 언급 했으므로. 그리고 isPopupTrigger의 자바 독이의 필요성을 설명 할 것 : 팝업 메뉴 서로 다른 시스템에서 다르게 트리거 :
참고가
...

공공 부울로 isPopupTrigger를(). 따라서 적절한 크로스 플랫폼 기능을 위해 isPopupTrigger를 mousePressed 및 mouseReleased에서 검사해야합니다.

자습서의마우스 수신기 API 섹션을 참조하십시오.

0

이 맥에서 잘 나를 위해 작동합니다 : 당신은뿐만 아니라 e.getButton() == 2를 확인할 수 있지만이 하나가 맥 트리거 될 때 나도 몰라

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

public class ButtonTest extends JFrame { 

    JButton button; 

    public ButtonTest() { 
     button = new JButton("W"); 
     button.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       if (e.getButton() == 3) { // if right click 
        button.setText("F"); 
        button.getModel().setPressed(false); 
        // button.setEnabled(true); 
       } else { 
        button.setText("X"); 
        button.getModel().setPressed(true); 
        // button.setEnabled(false); 
       } 
      } 
     }); 
     this.add(button); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new ButtonTest(); 
    } 

} 

.

2

그냥 작은 또한 : 가장 간단한 방법 오른쪽 버튼을 확인하기는 SwingUtilities.isRightMouseButton

+0

일반적으로 오른쪽 클릭을 트리거하는 Mac에서는 ctrl + 클릭을 사용할 수 없습니다. – I82Much

관련 문제