KeyListener在JPanel中不起作用?

时间:2013-11-19 03:59:49

标签: java keylistener

我正在尝试在java类中使用KeyListener,但由于某些奇怪的原因它不接受输入。我刚刚遇到这个问题,在它运行完美之前,但有些事情发生了变化,现在它不接受任何输入。以下是我的代码的摘录:

public class SquarePanel extends JPanel implements Runnable, KeyListener, MouseListener
...
public SquarePanel {
    this.setFocusable(true);
    this.requestFocusInWindow();
    addKeyListener(this);

然后我继续覆盖keyPressed:

@Override
public void keyPressed(KeyEvent e)
{
    System.out.println("SOMETHING");
}

然而没有任何反应。我做错了吗?

(旁注:我认为我的程序没有得到关注,这就是问题,因为当我使用isFocusOwner()时,它会出现错误。如果是这种情况,我该如何解决这个问题?)

1 个答案:

答案 0 :(得分:3)

  

我认为我的程序没有得到关注,这就是问题,

当KeyListener不起作用时,这是常见的问题。

 this.requestFocusInWindow();

以上语句仅在GUI当前可见时才有效。由于您在面板构造函数中执行该语句,因此它将不起作用。必须在可见的GUI上显示组件,以便组件请求焦点。

您必须在GUI可见后请求焦点。

或者,另一种选择是使用RequestFocusListener

为什么使用KeyListener? Swing旨在与KY Bindings一起使用。