2012-01-13 82 views
3

我使用,我设置为FullScreenWindow,像这样的代码一个JFrame对象上的KeyListener:摇摆键盘没有响应

class Game{ 

private GraphicsDevice device; 
... 

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

... 
} 

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

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(真)和requestfocusinwindow()没有帮助。 如果有人知道什么是错或如何解决这个问题,帮助将不胜感激...

托米

+5

您通常应该避免使用KeyListeners,而是使用Key Bindings。 Swing教程将告诉你如何使用这些,并会告诉你为什么他们更好。 – 2012-01-13 23:29:37

+0

是的,我在这个网站上看过很多次,这就是我如果找不到更快的解决方案要做的事情。 – Tomi 2012-01-13 23:44:15

+0

无论如何,感谢您的回复 – Tomi 2012-01-13 23:44:31

回答

4

requestFocusInWindow() ..

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

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

如果是这种情况,可以找到类似于dialog focus战略中添加RequestFocusListener的组合。

+0

我必须使用JFrame这是一个顶级容器,因此不是一个JComponent ...我想要做的是设置一个新的JFrame获取键盘焦点。 – Tomi 2012-01-14 09:58:04

+0

感谢回复的方式... – Tomi 2012-01-14 10:04:42

+0

下面是源文件的下载链接:https://www.rapidshare.com/#!download|165|852289592|mario_keylistener_problem.rar|389 – Tomi 2012-01-14 12:48:55