我有以下代码:
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并包含适当方法的类。
答案 0 :(得分:0)
如果框架中的任何组件具有焦点,那么它将不会为框架运行关键侦听器,并且因为该组件位于框架内,所以框架仍将为hasFocus()
返回true。
要解决此问题,您可以在所有组件上添加KeyListener,也可以使用jnativehook,也可以使用key bindings(可能是最佳解决方案)。
注意:我假设你的JFrame上有组件。