Java KeyListener在实现它、将KeyListener添加到对象并实现方法之后拒绝工作

Java KeyListener在实现它、将KeyListener添加到对象并实现方法之后拒绝工作,java,swing,jpanel,keylistener,Java,Swing,Jpanel,Keylistener,下面有一个主类,它创建了一个简单的JFrame和一个名为Screen的JPanel类的扩展,Screen是一个实现KeyListener的私有内部类。我让screen的构造函数将KeyListener作为参数添加到对象中。不管我怎么做,当我给它输入时,它都拒绝调用KeyListener方法 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main{ private JFram

下面有一个主类,它创建了一个简单的JFrame和一个名为Screen的JPanel类的扩展,Screen是一个实现KeyListener的私有内部类。我让screen的构造函数将KeyListener作为参数添加到对象中。不管我怎么做,当我给它输入时,它都拒绝调用KeyListener方法

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main{

    private JFrame window;
    private Screen screen;

    public static void main(String[] args){

        Main driver = new Main();

    }

    public Main(){

        window = new JFrame();
        screen = new Screen();
        window.add(screen);
        window.setSize(500, 500);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);

    }

    private class Screen extends JPanel implements KeyListener{

        public Screen(){
            this.addKeyListener(this);
        }

        public void keyPressed(KeyEvent e) {
            System.out.println("input received");
        }

        public void keyReleased(KeyEvent e) {
            System.out.println("input received");
        }

        public void keyTyped(KeyEvent e){

        }

    }
}

非常感谢您的反馈。

是的,这是一个非常常见的问题,它围绕着
KeyListener
的工作方式


KeyListener
仅当注册到的组件可聚焦且具有键盘焦点时,才会生成按键事件。在您竞争并尝试使您的
JPanel
可聚焦(这只会导致它看起来是随机工作的)之前,您应该使用,它旨在帮助解决此问题(使用
KeyListener

是的,这是一个围绕
KeyListener
如何工作的非常常见的问题

KeyListener
仅当注册到的组件可聚焦且具有键盘焦点时,才会生成按键事件。在您竞争并尝试使您的
JPanel
可聚焦(这只会导致它看起来是随机工作的)之前,您应该使用,它旨在帮助解决此问题(使用
KeyListener