在Java中确定没有InputEvent对象的修饰符键状态

时间:2010-06-16 01:33:13

标签: java keyboard awt

我需要确定Shift键的当前状态,但是当我需要状态时,我没有InputEvent个对象。我需要像java.awt.Toolkit.getLockingKeyState(int)这样适用于Shift的东西,而不仅仅是像VK_CAPS_LOCK这样的锁定键。有没有办法可以在不收听输入事件的情况下执行此操作,并在以后需要检查状态时存储for?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您手头没有活动,我认为不可能获得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.");
}