6
我需要确定Shift键的当前状态,但是在我需要的状态下,我没有InputEvent
对象。我需要像Shift java.awt.Toolkit.getLockingKeyState(int)
这样的工具,而不仅仅是锁定键,如VK_CAPS_LOCK
。有没有一种方法可以在不需要监听输入事件的情况下执行此操作,并在稍后需要检查状态时进行存储?确定在Java中没有InputEvent对象的修改键状态
谢谢!
我需要确定Shift键的当前状态,但是在我需要的状态下,我没有InputEvent
对象。我需要像Shift java.awt.Toolkit.getLockingKeyState(int)
这样的工具,而不仅仅是锁定键,如VK_CAPS_LOCK
。有没有一种方法可以在不需要监听输入事件的情况下执行此操作,并在稍后需要检查状态时进行存储?确定在Java中没有InputEvent对象的修改键状态
谢谢!
如果您手边没有事件,我认为不可能获得Shift键的状态。即使java.awt.Toolkit.getLockingKeyState(int)使用本机代码来获取其信息。我相信你可以设计自己的事件跟踪器/商店等,但以防万一,这是一个小方法,可能是有用的。您必须为其提供一个关注焦点的AWT组件。
public static boolean isShiftDown(Component c) throws AWTException {
final List<Boolean> res = new ArrayList<Boolean>();
final KeyListener listener = new KeyAdapter() {
@Override public void keyReleased(KeyEvent e) {
res.add(e.isShiftDown());
}
};
c.addKeyListener(listener);
new Robot().keyRelease(KeyEvent.VK_ALT);
try {Thread.sleep(50);} catch (InterruptedException e) {}
c.removeKeyListener(listener);
if (res.size() > 0)
return res.get(0);
throw new AWTException("Could not get shift key status.");
}
好问题。我使用的实现使用了InputEvent/KeyListener,但它意味着我们有一个窍门来确定是否停止转换,如果您有另一个应用程序为焦点,请按Shift键,然后转到我们的应用程序窗口,这不起作用。 – 2011-07-15 12:13:55