2017-03-08 46 views
-1

我在構造函數JFrame中使用了下面的代碼。但它只在沒有框架組件集中時才起作用。如何爲java.awt.Frame及其所有組件創建鍵綁定?

this.getActionMap().put("doSomething",actions); 
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK),"doSomething"); 
thiis.getActionMap().put("doSomething",actions);` 
+2

這個問題很令人困惑,因爲1)它提到在標題中AWT框架的FQN,但繼續討論擺動架在文中。 2)鍵綁定從來沒有用於AWT組件。 3)毫無疑問。 4)包含'thiis.getActionMap()..'的代碼段永遠不會編譯。 - 投票結束。 –

回答

1

但是當沒有框架組件的重點是它的唯一的工作。

正確。當組件具有焦點時,您正在使用InputMap。如果您希望綁定即使在組件沒有焦點時仍處於活動狀態,您需要使用不同的InputMap。請閱讀Swing教程How Key Bindings Work中的3個不同的InputMap類型。

如何爲java.awt.Frame及其所有組件創建鍵綁定?

鍵綁定適用於Swing組件,不適用於AWT組件。

你應該綁定添加到JFrameJRootPane

frame.getRootPane().getInputMap(...)... 
frame.getRootPane().getActionMap()... 
+0

我只是想在按ctrl + A時執行操作,即使jframe組件重點關注也不行。 –

+0

@TibinTomy,你不能用Java來做到這一點。 Swing只能在框架具有焦點時管理事件。如果你想聽操作系統事件,你將需要使用JNA或JNI(我一無所知)。 – camickr

相關問題