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或类似的值。