Java 摆动键盘没有响应
我在设置为FullScreenWindow的JFrame对象上使用KeyListener,类似于以下代码:Java 摆动键盘没有响应,java,swing,fullscreen,keylistener,Java,Swing,Fullscreen,Keylistener,我在设置为FullScreenWindow的JFrame对象上使用KeyListener,类似于以下代码: class Game{ private GraphicsDevice device; ... public void run(){ JFrame frame = new JFrame(); frame.addKeyListener(new MarioKeyListener()); device.setFullScreenWindow(frame); } ... } 如果我只是在ma
class Game{
private GraphicsDevice device;
...
public void run(){
JFrame frame = new JFrame();
frame.addKeyListener(new MarioKeyListener());
device.setFullScreenWindow(frame);
}
...
}
如果我只是在main方法中创建一个游戏对象并调用run(),它就可以正常工作。
但是,我想在MouseAdapter的mousePressed()函数中执行此操作,我将其添加到另一个JFrame-s菜单项中。结果是程序正常运行,但不接受任何键盘输入
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);
我认为我的frame对象不在焦点中,但是调用setFocusable(true)和requestfocusinwindow()没有帮助。
如果有人知道什么地方出了问题或者如何修复,我们将非常感谢您的帮助
托米
如果此组件的顶级祖先已经是焦点窗口,则请求此组件获取输入焦点
你在检查返回值吗?我怀疑它失败了,因为在调用该方法时,新窗口不是焦点组件
如果是这样的话,答案可能与向组合中添加a的策略类似。您通常应该避免使用键侦听器,而是使用键绑定。Swing教程将向您展示如何使用这些工具,并告诉您为什么它们更好。是的,我在这个网站上读了很多次,如果找不到更快的解决方案,我会这么做。如果您多次阅读有关“键绑定”的内容,那么为什么不从一开始就正确地设计游戏呢?此外,您不需要使用鼠标侦听器来处理对菜单项的单击。Swing教程还向您展示了正确的方法。我建议您先阅读教程并学习基础知识。我必须使用JFrame,它是顶级容器,因此不是JComponent。。。我想做的是设置一个新的JFrame来获得键盘焦点。这里是源文件的下载链接:相关代码是:Mariogame-main类GameWindow.run()-运行全屏游戏ConfigWindow-s构造函数ScreenManager.setFullscreen()MariokeListener键盘输入