鼠标监听器没有抛出任何错误,但没有启动(java)

问题描述 投票:0回答:2

我是按照我在网上找到的代码 geeksforgeeks 但鼠标监听器却没有被触发,我怀疑Runnable的某种实现锁定了对我的板子对象的访问,但我不确定。我怀疑是Runnable的实现锁定了对我的板子对象的访问,但我不确定。我的情况和上一篇文章中的 此职位.

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();
    }
}

我怀疑但也怀疑鼠标监听器可能无法正常工作,因为它是在一个非静态方法中创建的,但我怀疑这就是问题所在。我试过把声明移到构造函数的开头,但是没有用。

java swing debugging awt mouselistener
2个回答
0
投票

事件只会在有焦点的组件上注册。在你的程序中,这个组件就是你的主面板,也就是这个 Game 类。所以一个快速的解决方法就是将以下内容改为

 jf.addMouseListener(this);

改为

addMouseListener(this);

但是你应该将监听器添加到任何你可能想要获取事件的组件上,比如你的主面板,内容面板,还有jframe。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.