Sto cercando di scrivere un clone del campo minato in Java per divertimento. Ho una griglia di JButtons le cui etichette cambierò per rappresentare il conteggio dei pericoli, le bandiere, ecc.Fare clic con il tasto destro su JButton
Il mio problema è che non so come ottenere un clic destro su un pulsante JB per premere il pulsante. Ho fatto quanto segue:
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");
}
}
}
});
Questo non sembra funzionare affatto; la "F" non viene mai mostrata, solo la parte "X". Ma ancora più importante, questo non fa nulla per deprimere il pulsante.
MODIFICA: i Mac hanno l'attivazione popup su mousePress, non su mouseClick.
EDIT: Ecco la soluzione Ho lavorato in base al largo di risposta accettata:
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
E sì mi rendo conto il consiglio finale non dovrebbe avere tutti quei numeri indicati. Sto solo sviluppando. – I82Much
A cosa serve questa roba 'popupTrigger'? Basta controllare gli eventi mousePressed e controllare i modificatori dell'evento per BUTTON1_MASK o BUTTON2_MASK. –