Java JFrame鼠标单击停止键盘按钮
我的问题是,当我在框架屏幕的空间中单击时,它会停止注册键盘键,从而使我的播放器停止移动 提前谢谢你的帮助 守则:Java JFrame鼠标单击停止键盘按钮,java,swing,awt,keylistener,Java,Swing,Awt,Keylistener,我的问题是,当我在框架屏幕的空间中单击时,它会停止注册键盘键,从而使我的播放器停止移动 提前谢谢你的帮助 守则: private Component comp; .... public InputManager(Component comp) { this.comp = comp; mouseLocation = new Point(); centerLocation = new Point(); // register key and mouse liste
private Component comp;
....
public InputManager(Component comp) {
this.comp = comp;
mouseLocation = new Point();
centerLocation = new Point();
// register key and mouse listeners
comp.addKeyListener(this);
comp.addMouseListener(this);
comp.addMouseMotionListener(this);
comp.addMouseWheelListener(this);
// allow input of the TAB key and other keys normally
// used for focus traversal
comp.setFocusTraversalKeysEnabled(false);
}
GUI代码:
Game game = new Game();
game.setMinimumSize(new Dimension(WIDTH * 2, HEIGHT * 2));
game.setPreferredSize(new Dimension(WIDTH * 2, HEIGHT * 2));
game.setMaximumSize(new Dimension(WIDTH * 2, HEIGHT * 2));
frame = new JFrame(Game.NAME);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(game);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
game.start();
我假设您正在使用KeyListener来侦听键输入。请注意,这仅在正在侦听的组件具有焦点时有效,并且当您在JFrame上按下鼠标时,侦听的组件可能会失去焦点 解决方案不是使用KeyListener,而是使用比KeyListener更健壮和更高级别的概念 此外,您还需要停止将其用作侦听器。如果您的程序不仅仅是一个玩具程序,那么很难维护一个将自身用作自己侦听器的GUI类
另外,关于“oh yeah Game.java extends Canvas”:您不希望不必要地混合AWT和Swing组件,因为这可能会导致副作用。相反,只需使用所有Swing组件,如JPanels,而不是Canvase。+1用于键绑定+1表示停止使用此作为侦听器,+1表示混合备注。嗯,我需要把另外两个帖子投给你吗?谢谢,这很有帮助。我一定会尝试密钥绑定。我找到了一个临时解决方案,我将游戏类传递到InputManager类,而不是JFrame。