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