Klicken Sie mit der rechten Maustaste auf JButton

Ich versuche aus Spaß einen Minesweeper-Klon in Java zu schreiben. Ich habe ein Raster mit JButtons, deren Bezeichnungen ich ändern werde, um die Anzahl der Gefahren, Flaggen usw. darzustellen.

Mein Problem ist, dass ich nicht weiß, wie ich mit der rechten Maustaste auf einen JButton klicken kann, um den Knopf zu drücken. Ich habe folgendes gemacht:

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");
            }
        }
    }
});

Dies scheint überhaupt nicht zu funktionieren; Das "F" wird nie angezeigt, nur der "X" -Teil. Noch wichtiger ist jedoch, dass dies nichts zum Drücken der Taste beiträgt.

BEARBEITEN: Macs haben einen Popup-Trigger bei mousePress, nicht bei mouseClick.

EDIT: Hier ist die Lösung, die ich basierend auf der akzeptierten Antwort ausgearbeitet habe:

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-Klon http://grab.by/1y9z

Antworten auf die Frage(8)

Ihre Antwort auf die Frage