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

Java Swing实现MouseListener后mouseClicked方法未触发如何解决

问题原因
  • 核心原因:你将MouseListener绑定到了JFrame本身,但你添加的TTTCanvas组件铺满了整个JFrame的内容区域。Swing的鼠标事件是由最上层的可见组件优先捕获的,你点击画布时事件会被TTTCanvas消费,不会向上传递到JFrame,因此mouseClicked方法永远不会触发。
  • 次要隐患:你在构造方法中先调用了setVisible(true)再添加组件、注册监听器,虽然不影响本次问题,但可能导致后续组件渲染或监听注册异常,属于Swing开发的常见错误写法。
修复方案

你只需要把监听器绑定到TTTCanvas实例上即可,同时调整setVisible的调用顺序,修改后的构造方法代码如下:

public Frame() 
{
    setLayout(new BorderLayout());
    setResizable(false);
    setBounds(400, 400, width, height);
    setTitle("Tic Tac Toe");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    add(tttcanvas);
    // 把监听器绑定到画布组件上
    tttcanvas.addMouseListener(this);
    // 所有初始化完成后再显示窗口
    setVisible(true);
}

修改后点击画布就能正常触发mouseClicked回调,输出对应的日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:18:01