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

hey*_*cam 6 java keyboard awt

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

谢谢!

sol*_*dil 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.");
}
Run Code Online (Sandbox Code Playgroud)