KeyListener 在 JPanel 中不起作用?

2024-03-11

我正在尝试在 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()结果是假的。如果是这种情况我该如何解决?)


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

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

 this.requestFocusInWindow();

仅当 GUI 当前可见时,上述语句才有效。由于您正在面板构造函数中执行该语句,因此它不会产生任何效果。组件必须显示在可见的 GUI 上才能请求焦点。

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

或者,另一种选择是使用请求焦点监听器 http://tips4java.wordpress.com/2010/03/14/dialog-focus/ .

为什么要使用 KeyListener? Swing 被设计用于KY 绑定 http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KeyListener 在 JPanel 中不起作用? 的相关文章

随机推荐