Java扫雷项目开发:如何修改被点击的JLabel组件的图标
解决方案
首先修正你现有代码的核心错误
pola类中的JLabel pole被你定义成了static静态属性,这会导致所有pola实例共享同一个JLabel对象,你创建100个格子最终只会保留最后一个的JLabel,完全不符合需求,先把这行代码里的static删掉:
// 原错误代码 public static JLabel pole; // 修改后 public JLabel pole;
实现点击修改图标功能
你可以通过MouseEvent的getSource()方法直接获取触发点击事件的组件,也就是被点击的JLabel,修改myMouseListener类的mouseReleased方法即可:
@Override public void mouseReleased(MouseEvent e){ try{ // Windows路径注意反斜杠要转义,写双反斜杠 BufferedImage img = ImageIO.read(new File("D:\\SAPER\\grafika\\30x30\\pole odkryte.png")); ImageIcon icon = new ImageIcon(img); // 获取被点击的JLabel对象 JLabel clickedLabel = (JLabel) e.getSource(); // 修改图标 clickedLabel.setIcon(icon); }catch (Exception x){ x.printStackTrace(); // 建议添加异常打印,方便排查路径、文件读取类错误 } }
额外优化建议
- 不要每次点击都读取本地图片文件,建议把游戏用到的所有图标在程序启动时提前加载成静态常量复用,既提升性能也能避免频繁IO引发的异常
- 可以通过
e.getButton()判断点击的是鼠标左键/右键,实现扫雷游戏左键开格子、右键插旗的标准功能 - 你当前的炸弹随机生成逻辑存在重复赋值的问题,后续功能开发时可以优化为用集合存已生成的炸弹下标,避免重复生成
内容的提问来源于stack exchange,提问作者staa
相关产品推荐
相关产品推荐

