我是按照我在网上找到的代码 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();
}
}
我怀疑但也怀疑鼠标监听器可能无法正常工作,因为它是在一个非静态方法中创建的,但我怀疑这就是问题所在。我试过把声明移到构造函数的开头,但是没有用。
事件只会在有焦点的组件上注册。在你的程序中,这个组件就是你的主面板,也就是这个 Game
类。所以一个快速的解决方法就是将以下内容改为
jf.addMouseListener(this);
改为
addMouseListener(this);
但是你应该将监听器添加到任何你可能想要获取事件的组件上,比如你的主面板,内容面板,还有jframe。
问题在于使用Canvas而不是JPanel作为超级类。当我切换时,鼠标监听器开始发射。