本帖最后由 yaojianquansb 于 2010-08-04 16:50:57 编辑

解决方案 »

  1.   

    1、是重新绘制,因为刷新得太快,肉眼看不出来。其实你可以想想,在你拖动窗体的时候桌面就在一直的不停地重绘,但是给你的感觉只不过是窗体的位置改变了。2、paintComponent是组件重绘的时候自动调用的,很多时候重绘并不是程序员控制得了的,比如在改变窗体大小的时候,重绘就已经发生,重绘动作是由系统控制的,是JFrame的内部实现,所以大多数时候你要做的是:告诉组件重绘的时候该采用什么方式,而不用你去控制它重绘。楼主调用repaint方法的时候其实已经是手动调用了,而不是系统的自动调用。3、因为keyPress事件只能接受一个键,就是你最后按下的键,比如你先按下左箭头,由于满足keyCode == KeyEvent.VK_LEFT,会一直向左,然后你再按下shift键,keyCode变成了KeyEvent.VK_SHIFT,此时keyCode == KeyEvent.VK_LEFT,keyCode == KeyEvent.VK_RIGHT,keyCode == KeyEvent.VK_UP,keyCode == KeyEvent.VK_DOWN均不成立,add方法不会被调用,自然不会移动。