鼠标侦听器不抛出错误但不触发 (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 作为超类。当我切换时,鼠标侦听器开始触发。
我正在遵循在 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 作为超类。当我切换时,鼠标侦听器开始触发。