【问题标题】:Why does my keyListener stop working when fullscreen?为什么我的 keyListener 在全屏时停止工作?
【发布时间】:2012-01-11 15:13:33
【问题描述】:

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

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

以及处理按键的方法,也就是当遇到escape时程序退出。

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

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

然后关键监听器停止工作。有人可以解释为什么会这样,以及当我全屏显示以保留听众时我需要做什么?

TIA

【问题讨论】:

  • 不要使用keyListeners,使用keyBindings

标签: java swing keylistener


【解决方案1】:

当遇到逃逸时程序退出。

您可以将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);

【讨论】:

  • 有一个相关示例here 演示了setFullScreenWindow() 和键绑定。
【解决方案2】:

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

【讨论】:

  • 将尺寸设置为最大屏幕尺寸不会导致标题栏和边框被隐藏。
  • 啊,我错过了他的意思,还以为他在使用全屏,而不是最大化。 :S
猜你喜欢
  • 2011-11-24
  • 2017-07-28
  • 2013-07-27
  • 2016-01-03
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多