【发布时间】:2019-08-16 05:47:35
【问题描述】:
我有 JFrame,它必须检测大写锁定是打开还是关闭。如果我关注窗口一切正常,程序会通过 KeyListener 检测大写锁定状态的变化。当窗口最小化时,我无法检查大写锁定状态,所以我在用户重新聚焦窗口后检查状态。但随后检查返回我得到的最后一个大写锁定状态,而不是当前状态。
JFrame frame;
public example() {
frame = new JFrame();
frame.setSize(400, 400);
frame.setVisible(true);
frame.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowGainedFocus(WindowEvent e) {
System.out.println("Caps Lock Status: " + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
@Override
public void windowLostFocus(WindowEvent e) {
// nothing to do
}
});
}
如果我的大写锁定在窗口打开时关闭,而我在窗口未聚焦时打开大写锁定。然后,我期望在窗口重新聚焦后程序会得到一个真实的结果。
感谢各种建议,谢谢!
【问题讨论】:
-
能否请您告诉我们您的操作系统是什么,您的 Java 版本是什么?
-
@GeorgeZ。我可以在 Windows 7/10 上产生这种行为,我的 Java 版本是 8。
-
@camickr 我无法重现您所附问题中描述的行为。如果窗口聚焦,一切正常,检测和行为都很好。如果我更改了大写锁定状态,而窗口未获得焦点,则检查将返回窗口未获得焦点之前的最后一个大写锁定状态。
-
请问为什么需要检测 CAPS LOCK 何时开启?我的意思是也许还有另一种方法可以做你想做的事......