Java KeyListener未工作/未被调用?
我正在编写一个小程序来测试Java KeyListener未工作/未被调用?,java,swing,awt,jlabel,keylistener,Java,Swing,Awt,Jlabel,Keylistener,我正在编写一个小程序来测试键侦听器,使主类和唯一类实现它。我首先在类中创建一个类,实现键侦听器,并添加以下行: this.addKeyListener(new Handler()); this.addKeyListener(this); 但是这不起作用,所以我让主类实现了键侦听器,仍然没有调用按键/typed/release。我把课程缩短了很多,所以这里是: public class Game_Main extends JPanel implements KeyListener{ JLab
键侦听器
,使主类和唯一类实现它。我首先在类中创建一个类,实现键侦听器,并添加以下行:
this.addKeyListener(new Handler());
this.addKeyListener(this);
但是这不起作用,所以我让主类实现了键侦听器,仍然没有调用按键
/typed/release。我把课程缩短了很多,所以这里是:
public class Game_Main extends JPanel implements KeyListener{
JLabel ship = new JLabel();
JLabel bg = new JLabel();
static JFrame frame;
public Game_Main(){
setPreferredSize(size);
this.addKeyListener(this);
}
public static void main(String[] args){
Game_Main g = new Game_Main();
frame = new JFrame();
frame.setPreferredSize(size);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(g);
frame.setVisible(true);
}
public void keyTyped(KeyEvent e) {
System.out.println("ds");
}
}
此问题的另一个解决方案是在main方法中创建一个实例,例如:
KeyListener() listener = new Game_Main();
然后你可以剪线:
this.addKeyListener(new Handler());
this.addKeyListener(this);
从构造函数中提取,并将其放在main方法中。在将第一个this更改为frame,第二个this更改为listener之后,它就可以正常工作了。您只需将侦听器注册或输入到帧中即可执行事件。尝试使用所需方法中的KeyEvent来定义哪些键是类型。1)对于Swing,通常使用基于AWT的较低级别的键绑定,
KeyListener
。有关如何使用它们的详细信息,请参阅。2) JPanel
通常不适用于关键事件。的可能重复项要更快获得更好的帮助,请发布一个。运行时问题的SSCCE应该编译并运行,而发布的内容即使在添加导入后也不会编译。修复了错误,感谢气垫船。我所需要做的就是添加一个setFocusable(true);因为默认情况下,JPanel将其设置为false或类似的值。