事件加错地方了。
在Frame的构造函数定义中加上:
this.addKeyListener(new KeyListener() {
    public void keyReleased(KeyEvent e)
    {
    }    public void keyPressed(KeyEvent e)
    {
        int code = e.getKeyCode();
        if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_A)
        {
            centerPanel.object.moveleft();
        }
        else if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_D)
        {
            centerPanel.object.moveright();
        }
        else if (code == KeyEvent.VK_UP || code == KeyEvent.VK_W)
        {
            centerPanel.object.moveup();
        }
        else if (code == KeyEvent.VK_DOWN || code == KeyEvent.VK_S)
        {
            centerPanel.object.movedown();
        }
        else
        {
            System.out.println(e.getKeyChar());
        }
    }    public void keyTyped(KeyEvent e)
    {
    }
});

解决方案 »

  1.   

    HI: superyellow(大黄) 
      你真的好厉害!把你的只拷过去就OK了,但我有个疑问?《核心技术》那本书里在讲键盘控制的时候KeyListener就是加到Panel的构造函数里的,这两个有什么区别?加到panel 里可以么?怎么加?是不是需要改某些地方?
      

  2.   

    我待会试一下,看看放在Panel里行不行,估计希望不大。
    我觉得可能是因为Panel放在另外一个容器Frame中的原因,所以键盘事件被Frame接收到了,如果想让Panel接收到,可能还需要Frame把事件传过去。
    也可能有更好的办法。有时间研究一下。
      

  3.   

    还是把事件监听放在Frame里好一些。
      

  4.   

    谢谢了!
    那别的事件监听器也可以既放在Frame里,也可以放在Panel里了吧
    但这两个到底有什么区别呢?
    里面到底有什么道理呢?
      

  5.   

    那象我那样放在Panel里就是接不到么,我已经把面板加到Frame里了啊。
    还是面板上接不到键盘消息?
    不明白
    明天晚上结帖!
      

  6.   

    我想是这样,最顶端的容器(Frame)接收到了键盘消息,而Panel被包含另一个容器中了。
    面板上是可以监听事件的,如画图时的,对鼠标事件的监听。
    中间详细的机理,希望有这方面的专家出来讲一下。(我没有仔细研究过,不敢再乱说了,以免误导观众。以上仅供参考。)