java - 右键 setIcon() 标记炸弹 - 扫雷

标签 java swing mouselistener minesweeper jtogglebutton

我对编程还很陌生,正在尝试制作扫雷 GUI。游戏完美地右键单击 JToggleButton,在按钮上显示了一个代表炸弹的“B”,但是当我在鼠标监听器中用 setIcon() 替换 setText() 时,它会在左键单击和右键单击发生时显示图标。我在 setText() 时没有遇到这个问题。

    public void mousePressed(MouseEvent e){
        if(e.isMetaDown())
            if(btnPresses == 0)
            {
                startTime = System.currentTimeMillis();
                btnPresses++;
            }
            //if(btn[y][x].getText().equals("B"))
            if(btn[y][x].getIcon()==flag)
            {
                //btn[y][x].setText("");
                btn[y][x].setIcon(null);
                if(bombs[y][x]!=BOMB)
                    markers++;
            }
            else
            {
                //btn[y][x].setText("B");
                btn[y][x].setIcon(flag);
                if(bombs[y][x]==BOMB)
                    markers++;
                else
                    markers--;
            }

我向 Action 监听器添加了 btn[y][x].setIcon(null),这会导致标志图标仅在左键单击时短暂出现,但我宁愿它根本不出现。

最佳答案

您需要区分鼠标左键单击 MouseEvent.BUTTON3 和鼠标右键单击 MouseEvent.BUTTON3,然后采取相应的操作。例如,当我做这样的事情时,我通过以下方式在模型中设置“flag” boolean 值(使用 MVC):

@Override
public void mousePressed(MouseEvent e) {
   if (e.getButton() == MouseEvent.BUTTON3) {
      model.upDateButtonFlag();
   }
}

MouseListener 只能用于设置或取消设置标志。否则,您应该让 JButton 通过其 ActionListener 响应左键单击。

关于java - 右键 setIcon() 标记炸弹 - 扫雷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570796/

相关文章:

java - 如何将A java文件与B java文件连接

java - 读取动画 GIF 中帧之间的延迟

Java多线程: make a thread to start after checking the returned value from the first thread

java - 如何在 Java 程序中获取 "ribbon"UI 组件,例如在 Office 2007 中?

java - 如何创建计时器任务的新实例而不是取消并重新启动它?

java - 无法在 MouseListener 构造函数之外调用变量

java - 使用 Java 命名约定将 Python 对象(使用 Python 约定)编码为 JSON

java - Elasticsearch 从所有文档中获取某个字段的值

java - 关闭 JFrame 窗口后启动事件

java - GUI 按钮的延迟