Определить состояние ключа модификатора без объекта InputEvent в Java - PullRequest
6 голосов
/ 16 июня 2010

Мне нужно определить текущее состояние клавиши Shift, но в то время, когда мне нужно состояние, у меня нет объекта InputEvent вокруг.Мне нужно что-то вроде java.awt.Toolkit.getLockingKeyState(int), которое работает для Shift, а не только ключи блокировки, такие как VK_CAPS_LOCK.Есть ли способ, которым я могу сделать это без прослушивания входных событий и сохранения для последующего использования, когда мне нужно проверить состояние?

1 Ответ

1 голос
/ 21 сентября 2011

Не думаю, что можно получить статус клавиши 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.");
}
...