Java 摆动键盘没有响应

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

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

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键盘输入