2011-12-02 62 views
2

我通常的方式定義的按鍵偵聽器:爲什麼我的keyListener在全屏時停止工作?

frame.addKeyListener(this); 
frame.setFocusable(true); 

和方法來處理按鍵,這是逃生時被擊中的程序退出。

這個工作,但是當我要使JFrame的使用充滿整個窗口:

frame.setSize(Toolkit.getDefaultToolkit().getScreenSize()); 
frame.setLocation(0, 0); 
frame.validate();  

那麼關鍵聽衆停止工作。有人可以解釋爲什麼這是,當我全屏保持聽衆時,我需要做什麼?

TIA

+1

不使用keyListeners,使用鍵綁定 – kleopatra

回答

3

這是逃生時被擊中的程序退出。

您可以將Key Bindings添加到您的框架的根窗格。喜歡的東西:

KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke("ESCAPE"); 
Action escapeAction = new AbstractAction() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     // add code to end program 
    } 
}; 

getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE"); 
getRootPane().getActionMap().put("ESCAPE", escapeAction); 
+1

有一個相關的例子[這裏](http://stackoverflow.com/a/7457102/230513),演示了'setFullScreenWindow()'和鍵綁定。 – trashgod

0

我想你需要到的KeyListener添加到JFrame的子組件。當它全屏顯示時,我不認爲框架(包括標題欄,關閉/最大化/最小化按鈕,全部隱藏在全屏幕中)可以接收輸入事件。

+0

的大小設置爲最大屏幕尺寸不會導致標題欄和邊框隱藏。 – camickr

+0

啊,我錯過了他所指的,並認爲他正在使用全屏,而不是最大化。 :S – jefflunt

相關問題