Java 右键单击JButton

Java 右键单击JButton,java,swing,jbutton,right-click,mouselistener,Java,Swing,Jbutton,Right Click,Mouselistener,正在尝试向JButton添加鼠标指针,以便右键单击以标记单元格。问题是当我将它实例化到按钮上时,它不允许我。也许因为它已经有了actionlistener?我不太确定。感谢您的帮助。我正在制作一款扫雷游戏,仅供参考 button = new JButton[size][size]; ButtonListener bl = new ButtonListener(); for (int r = 0; r < size; r++) { for (int c = 0; c < size; c

正在尝试向JButton添加鼠标指针,以便右键单击以标记单元格。问题是当我将它实例化到按钮上时,它不允许我。也许因为它已经有了actionlistener?我不太确定。感谢您的帮助。我正在制作一款扫雷游戏,仅供参考

button = new JButton[size][size];
ButtonListener bl = new ButtonListener();
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
button[r][c] = new JButton("");
button[r][c].addActionListener(bl);
button[r][c].addMouseListener (new MouseAdapter());``
// error message: cannot instantiate the type MouseAdapter
panel.add(button[r][c]);

MouseAdapter是一个抽象类,您不能创建它的实例。 这就是为什么会出现错误

button[r][c].addMouseListener (new MouseAdapter());  //  this will not work

button[r][c].addMouseListener (new MouseAdapter(){});  // this will
                                                 ^

button[r][c].addMouseListener (new MouseAdapter(){
    public void mouseClicked(MouseEvent e){
         // and this will actually do sth. ; )
    }
});

对于扫雷游戏你已经寻找

1)
JToggleButton

2) 将
图标添加到
JToggleButton
方法

  • JToggleButton#setIcon()

  • JToggleButton#setSelectedIcon()

  • JToggleButton#setDisabledIcon()

3) 将
MouseListener
添加到
JToggleButton

4) 使用方法
SwingUtilities.isRightMouseButton()
覆盖鼠标选中的

结果可能是

源代码

import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class MyToggleButton extends JFrame {

    private static final long serialVersionUID = 1L;
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");

    public MyToggleButton() {
        final JToggleButton toggleButton = new JToggleButton();
        toggleButton.setBorderPainted(false);
        toggleButton.setBorder(null);
        toggleButton.setFocusable(false);
        toggleButton.setMargin(new Insets(0, 0, 0, 0));
        toggleButton.setContentAreaFilled(false);
        toggleButton.setIcon((errorIcon));
        toggleButton.setSelectedIcon(infoIcon);
        //toggleButton.setRolloverIcon((infoIcon));
        //toggleButton.setPressedIcon(warnIcon);
        toggleButton.setDisabledIcon(warnIcon);
        toggleButton.addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
                    if (toggleButton.isEnabled()) {
                        toggleButton.setEnabled(false);
                    } else {
                        toggleButton.setEnabled(true);
                    }
                }
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }
        });
        add(toggleButton);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyToggleButton t = new MyToggleButton();
            }
        });
    }
}

@驱逐者你在说什么?这是这家伙的第一个问题……编译器是你的朋友:你为什么要注册一个无所事事的鼠标侦听器:-)
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class MyToggleButton extends JFrame {

    private static final long serialVersionUID = 1L;
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");

    public MyToggleButton() {
        final JToggleButton toggleButton = new JToggleButton();
        toggleButton.setBorderPainted(false);
        toggleButton.setBorder(null);
        toggleButton.setFocusable(false);
        toggleButton.setMargin(new Insets(0, 0, 0, 0));
        toggleButton.setContentAreaFilled(false);
        toggleButton.setIcon((errorIcon));
        toggleButton.setSelectedIcon(infoIcon);
        //toggleButton.setRolloverIcon((infoIcon));
        //toggleButton.setPressedIcon(warnIcon);
        toggleButton.setDisabledIcon(warnIcon);
        toggleButton.addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
                    if (toggleButton.isEnabled()) {
                        toggleButton.setEnabled(false);
                    } else {
                        toggleButton.setEnabled(true);
                    }
                }
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }
        });
        add(toggleButton);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyToggleButton t = new MyToggleButton();
            }
        });
    }
}