JBUTTON을 마우스 오른쪽 버튼으로 클릭하십시오
문제
나는 재미를 위해 Java로 광산물 클론을 쓰려고 노력하고 있습니다. 나는 위험 수, 깃발 등을 나타 내기 위해 라벨을 변경하는 Jbuttons의 그리드가 있습니다.
내 문제는 버튼을 누르기 위해 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);
해결책
마우스 오른쪽 버튼으로 버튼을 누를 수 없습니다. 마우스 리스너에 그러한 라인을 추가하십시오
무성한 :
if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true));
MouserELEARD :
if(needReset) {underlyingButton.getModel().setPressed(false));
또는 원하는대로 거기에서하십시오.
다른 팁
나는 사용하지 않을 것이다 isPopupTrigger
그러나 오른쪽 버튼을 직접 확인하십시오.
button.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ boolean mine = field.isMine(x, y); if (e.getButton() == MouseEvent.BUTTON2) { button.setText("F"); } ...
작은 추가 : 오른쪽 버튼을 확인하는 가장 간단한 방법은 SwingUtilities.isRightMouseButton
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
무엇보다도. 이벤트가 시작될 때 확인하십시오.
편집하다
공개 int getButton ()
Returns which, if any, of the mouse buttons has changed state.
당신이 언급 한 바와 같이, "Mousepressed"를 확인하면 문제가 해결되었습니다. 그리고 Javadoc iSpopuptrigger 이것에 대한 필요성을 설명 할 것입니다.
공개 부울 ispopuptrigger ()
...
참고 : 팝업 메뉴는 다른 시스템에서 다르게 트리거됩니다. 따라서 적절한 크로스 플랫폼 기능을 위해 Mousepressed 및 MouserEleided에서 iSpopuptrigger를 점검해야합니다.
또한 섹션을 참조하십시오 마우스 리스너 API 자바에서 그네 지도 시간.
오른쪽 클릭에 눈에 띄게 우울한 버튼은 버튼의 "정상적인"동작의 일부가 아닙니다. 당신은 그것을 사용하여 그것을 가짜로 만들 수 있습니다 JToggleButton
오른쪽 마우스 버튼이 고정되는 동안 버튼의 배경색과 경계를 변경하거나 간단히 변경합니다.
이벤트가 올바르게 트리거되고 (디버그 FTW!) 버튼이 발생한다고 확신한다면 .Settext ( "F")가 발생하고 있다면 단순히 다시 칠해야 할 것입니다.
버튼을 다시 칠하십시오.http://java.sun.com/javase/6/docs/api/javax/swing/jcomponent.html#repaint (java.awt.rectangle)
이것은 Mac에서 나에게 잘 작동합니다.
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();
}
}
e.getButton () == 2를 확인할 수도 있지만 MAC에서 언제 트리거되는지 모르겠습니다.