我正在尝试在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()
时,它会出现错误。如果是这种情况,我该如何解决这个问题?)
答案 0 :(得分:3)
我认为我的程序没有得到关注,这就是问题,
当KeyListener不起作用时,这是常见的问题。
this.requestFocusInWindow();
以上语句仅在GUI当前可见时才有效。由于您在面板构造函数中执行该语句,因此它将不起作用。必须在可见的GUI上显示组件,以便组件请求焦点。
您必须在GUI可见后请求焦点。
或者,另一种选择是使用RequestFocusListener。
为什么使用KeyListener? Swing旨在与KY Bindings一起使用。