Java Key Listener无法获得窗口焦点

时间:2015-05-10 21:42:36

标签: java swing

我有以下代码:

    frame = new JFrame();
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            isRunning = false;
        }
    });
    frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
    frame.setSize(width * scale, height * scale);
    frame.setResizable(false);
    frame.setVisible(true);
    while (!frame.hasFocus()) {
        frame.setFocusable(true);
        frame.requestFocus();
    }
    frame.addKeyListener(new KeyManager());

我正在尝试使用密钥监听器来监听密钥。问题是 - 它只能工作大约1/10次。为什么?有人可以帮我解决一下吗?我认为这是窗口焦点的一个问题,但我不明白我的窗口怎么没有焦点(因为循环)。

KeyManager是一个扩展KeyAdapter并包含适当方法的类。

1 个答案:

答案 0 :(得分:0)

如果框架中的任何组件具有焦点,那么它将不会为框架运行关键侦听器,并且因为该组件位于框架内,所以框架仍将为hasFocus()返回true。

要解决此问题,您可以在所有组件上添加KeyListener,也可以使用jnativehook,也可以使用key bindings(可能是最佳解决方案)。

注意:我假设你的JFrame上有组件。