如何检查是否按下了大写锁定键?
好吧,在此之前被标记为可能重复,我已经尝试了以下代码:
Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)
它总是对我不利[见下文]。 有人可以确认这是否应该有效,我是在滥用它,或者它是否已经被打破了? 如果它实际上已经坏了,有没有人有更好的方法可以使用?
编辑:
好吧,刚刚发现了更多的东西。 它似乎只是返回我的程序启动时的状态。 如果我用它启动程序,它会打开它,反之亦然。 这是我的代码:
while (true) { boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK); System.out.println("Caps lock is now: " + (isOn ? "ON" : "off")); try { Thread.sleep(1000); } catch (InterruptedException e) { } }
并且它总是打印出它开始的任何东西
(例如,如果我从大写锁定开始,即使我之后立即关闭它,它会打印:
大写锁定现在是:开启
大写锁定现在是:开启
大写锁定现在是:开启
大写锁定现在是:开启
等,如果我从它开始,它将打印出来,无论如何)
四处getLockingKeyState()
,我认为getLockingKeyState()
可能会被破坏。
您可以尝试使用KeyboardUtils ,但看起来这意味着您必须携带JNA开销。
public void checkOnOff() { Thread th = new Thread() { public void run() { for (;;) { if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) { jLabel4.setForeground(Color.red); jLabel4.setText("CAPSLOCK is ON"); } else { jLabel4.setText(null); } try { sleep(100); } catch (InterruptedException ex) { Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex); } } } };th.start(); }