鼠标侦听器不抛出错误但不触发 (java)

Mouse listener throws no errors but doesn't fire (java)

我正在遵循在 geeksforgeeks but the mouse listener isn't firing. I suspect that somehow the implementation of runnable is locking access to my board object, but I'm not sure. I'm in a similar boat to the OP of this post 上找到的代码。

public class Game extends Canvas implements MouseListener {

    JFrame jf = new JFrame();

    Game() {
        jf.getContentPane().add(this, BorderLayout.CENTER);
        jf.setSize(new Dimension(500,500+30));
        jf.setVisible(true);
        jf.addMouseListener(this);
    }

    public void mouseClicked(MouseEvent e){
        System.out.println("Hello World!");
    }

    public void mousePressed(MouseEvent e){}

    public void mouseReleased(MouseEvent e){}

    public void mouseEntered(MouseEvent e){}

    public void mouseExited(MouseEvent e){}

    public static void main(String[] args){
        Game game = new Game();
    }
}

我怀疑鼠标侦听器可能无法正常运行,因为它是在非静态方法中创建的,但我怀疑这就是问题所在。我试过将声明移到构造函数的开头,但这没有帮助。

事件只会在有焦点的组件上注册。其中,在您的程序中是您的主面板,Game class。所以一个快速的解决办法就是改变:

 jf.addMouseListener(this);

addMouseListener(this);

但是您应该将侦听器添加到您可能想要获取事件的任何组件,即您的主面板、内容窗格和 jframe。

问题在于使用 Canvas 而不是 JPanel 作为超类。当我切换时,鼠标侦听器开始触发。