2011-12-02 162 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

相关问题