Kliknij prawym przyciskiem myszy na JButton
Staram się napisać klon Minesweeper w Javie dla zabawy. Mam siatkę JButtonów, których etykiety zmienię, aby przedstawić liczbę niebezpieczeństw, flagi itp.
Mój problem polega na tym, że nie wiem, jak kliknąć prawym przyciskiem myszy przycisk J, aby nacisnąć przycisk. Zrobiłem co następuje:
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");
}
}
}
});
To wcale nie wydaje się działać; „F” nigdy nie jest pokazywane, tylko część „X”. Ale co ważniejsze, to nie robi nic, by wcisnąć przycisk.
EDYCJA: Mac mają wywoływane wyskakujące okienko na myszy, a nie mouseClick.
EDIT: Oto rozwiązanie, które opracowałem na podstawie zaakceptowanej odpowiedzi:
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);