【问题标题】:Swing keyboard not responding摇摆键盘没有反应
【发布时间】:2012-02-10 03:05:15
【问题描述】:

我在设置为 FullScreenWindow 的 JFrame 对象上使用 KeyListener,类似于以下代码:

class Game{

private GraphicsDevice device;
...

public void run(){
JFrame frame = new JFrame();
frame.addKeyListener(new MarioKeyListener());
device.setFullScreenWindow(frame);
}

...
}

如果我只是在我的 main 方法中创建一个 Game 对象并调用 run(),它就可以正常工作。 但是我想在我添加到另一个 JFrame-s MenuItem 的 MouseAdapter 的 mousePressed() 函数中执行此操作。结果是程序正常运行,但不接受任何键盘输入。

JMenu gamemenu = new JMenu("Game");
   JMenuItem newGame = new JMenuItem("New Game");
    newGame.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
    Game g = new Game();
    g.run();    
    }               
});
gamemenu.add(newGame);

我认为我的框架对象不在焦点上,但调用 setFocusable(true) 和 requestfocusinwindow() 没有帮助。 如果有人知道出了什么问题或如何解决此问题,将不胜感激...

托米

【问题讨论】:

  • 您通常应该避免使用 KeyListeners,而是使用 Key Bindings。 Swing 教程将向您展示如何使用它们,并告诉您为什么它们更好。
  • 是的,我在这个网站上读过很多次了,如果我找不到更快的解决方案,我会这样做。
  • 如果您多次阅读“键绑定”,那么为什么不从一开始就正确设计您的游戏呢?此外,您不使用 MouseListener 来处理对菜单项的单击。 Swing 教程还向您展示了执行此操作的正确方法。我建议您先阅读教程并学习基础知识。

标签: java swing fullscreen keylistener


【解决方案1】:

requestFocusInWindow()..

请求此组件获得输入焦点,如果此组件的顶级祖先已经是焦点窗口。

你在检查返回值吗?我怀疑它失败了,因为在调用方法时新窗口不是焦点组件。

如果是这种情况,可能会以类似于dialog focus 策略的方式找到答案,即在组合中添加RequestFocusListener

【讨论】:

  • 我必须使用一个 JFrame,它是一个顶级容器,因此不是 JComponent...我要做的是设置一个新的 JFrame 以获得键盘焦点。
  • 这里是源文件的下载链接:rapidshare.com/…
  • 相关代码为: Mariogame - 主类 GameWindow.run() - 运行全屏游戏 ConfigWindow -s 构造函数 ScreenManager.setFullscreen() MarioKeyListener - 键盘输入
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 2015-05-30
  • 2014-08-24
  • 1970-01-01
  • 2023-01-25
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多