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。