为什么我的keyListener在全屏时停止工作?

时间:2011-12-02 15:49:57

标签: java swing keylistener

我以通常的方式定义了一个关键的监听器:

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

处理按键的方法,即当程序退出时会退出。

这可行,但是当我使用以下内容填充整个窗口时,JFrame会填充:

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

然后关键监听器停止工作。有人可以解释为什么这是我在全屏保持听众时需要做的事情吗?

TIA

2 个答案:

答案 0 :(得分: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 :(得分:0)

我认为您需要将KeyListener添加到JFrame的子组件中。当它全屏显示时,我不认为帧(包括标题栏,关闭/最大化/最小化按钮,所有这些都隐藏在全屏幕中)可以接收输入事件。