You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为JPanel子类Spot的二维数组添加MouseListener并解决点击无响应问题

解决国际象棋Spot面板点击无响应的问题

核心问题:方法名大小写错误

你代码里的监听器方法名写错了——MousePressed应该改成mousePressed(首字母小写)。Java是大小写敏感的,MouseAdapter中的回调方法是小写开头的mousePressed,你写的大写版本并没有覆盖父类方法,导致点击事件完全不会触发。

修正后的监听器代码:

board[i][j].addMouseListener(new MouseAdapter() {
    // 注意首字母是小写m,加上@Override注解可在编译阶段排查错误
    @Override
    public void mousePressed(MouseEvent e) {
        Spot spot = (Spot)e.getSource();
        spot.setBackground(new Color(195, 208, 227));
        // 可添加打印语句验证事件是否触发
        System.out.println("点击了Spot: " + spot.i + "," + spot.j);
    }
});

额外排查点

如果修正后仍无效果,检查以下内容:

  • Spot的不透明性:确保Spot面板调用过setOpaque(true)(JPanel默认值为true,但如果你的Spot构造函数修改过该属性,背景色无法正常显示)。
  • 组件遮挡问题:确认gameboard的布局没有导致Spot被其他组件覆盖,可临时给Spot添加边框setBorder(BorderFactory.createLineBorder(Color.RED)),可视化检查Spot的显示范围。
  • 事件拦截问题:如果Spot内部包含子组件,子组件可能会抢占鼠标事件,可给子组件设置setFocusable(false)避免拦截。

内容的提问来源于stack exchange,提问作者aduvvuri007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:15:19