尝试向JButton添加mouseAdapter以便右键单击以标记该单元格。问题是当我将其实例化到按钮上时,它不会让我看到。也许是因为它已经带有动作监听器了?我不太确定任何帮助表示赞赏。我正在创建一个扫雷游戏,fyi。

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]);

最终,如果可行,我想将其纳入游戏中:
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);
        }
    }
});

最佳答案

对于扫雷游戏,您需要寻找

1)JToggleButton
2)将Icon添加到JToggleButton方法

  • JToggleButton#setIcon();
  • JToggleButton#setSelectedIcon();
  • JToggleButton#setDisabledIcon();

  • 3)将MouseListener添加到JToggleButton
    4)使用方法mouseClicked覆盖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();
                }
            });
        }
    }
    

    09-25 21:59