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

时间:2016-01-14 23:47:01

标签: java swing jpanel keylistener

我在下面的这个主类创建了一个简单的JFrame和一个名为Screen的JPanel类的扩展,它是一个实现KeyListener的私有内部类。我有屏幕的构造函数将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){

        }

    }
}

感谢任何反馈。

1 个答案:

答案 0 :(得分:2)

是的,这是一个非常常见的问题,它围绕着KeyListener的工作原理。

KeyListener仅在注册的组件具有焦点并且具有键盘焦点时才生成键事件。在比赛之前尝试使JPanel具有可调焦性,这只会导致它看似随机工作,您应该使用Key Bindings API来代替,这是为了帮助解决这个问题({{1} }})