将KeyListeners添加到JPanel不起作用

时间:2013-09-15 18:34:17

标签: java swing keylistener

我刚刚完成了关于制作网络游戏的在线教程。 它本身的游戏只是一个小圈子,在屏幕上跟随鼠标。

我一直在修改代码,使用键来移动圆圈而不是鼠标。然而,在我从未使用过“JPanel”之前,我已经完成了这项工作 努力让钥匙移动圆圈。

游戏的“客户端”只包含两个文件,Client.java和DataPackage.java,问题(据我所知)似乎在Client.java中。

我不会粘贴整个代码,因为它非常大(如果你认为有必要,我会这样做),但这里有一点让球跟着鼠标

public Client()
    {
        this.addMouseMotionListener(new MouseMotionListener()
        {

            @Override
            public void mouseDragged(MouseEvent e)
            {
                x = e.getX();
                y = e.getY();
            }

            @Override
            public void mouseMoved(MouseEvent e) {}

        });
}

现在我尝试过改变

this.addMouseMotionListener(new MouseMotionListener()
            {

                @Override
                public void mouseDragged(MouseEvent e)
                {
                    x = e.getX();
                    y = e.getY();
                }

                @Override
                public void mouseMoved(MouseEvent e) {}

            });

this.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

            public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

            public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
        });

但这似乎不起作用,然后我尝试通过将其置于

之外来改变键控代码的位置
public Client() { }

然后我认为它可能是文件顶部的'implements'标签。所以我添加了

implements KeyListener

的结尾
public class Client extends JComponent

但同样,这不起作用 然后我做了一些更多的研究,似乎我需要通过使用

来设置面板
panel.setFocusable(true);

但是这个信息的来源,未能说明放在哪里以及我把它放在哪里都会抛出错误

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:4)

看看@camickr,一位摇摆大师,文章Motion using the keyboard。使用KeyListeners有两个大问题,组件必须是可聚焦的并且必须处于焦点。KeyBindings是摆动的正确方法,将键绑定到特定操作。 How to Use KeyBindings