【发布时间】: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