我在JFrame对象上使用KeyListener,我设置为FullScreenWindow,类似这样的代码:
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()没有帮助。 如果有人知道什么是错的或如何解决这个问题,那将非常感谢帮助...
托米
答案 0 :(得分:4)
请求此Component获取输入焦点,如果此Component的顶级祖先已经是焦点窗口。
你在检查返回值吗?我怀疑它失败了,因为在调用方法时新窗口不是焦点组件。
如果是这种情况,答案可能与dialog focus添加RequestFocusListener
混合策略的方式类似。