无法缓慢移动面板

时间:2014-03-19 02:17:26

标签: java multithreading swing

我有一个简单的问题。我想在每一步中移动JPanel(在另一个JPanel中),所以它看起来像是连续移动('Number'是我的类扩展JPanel):

Number n = (Number)this.findComponentAt(x, y);
 for(int pp= 0; pp<10; pp++){
try {
        Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
n.setLocation(x-10*pp, y);
n.repaint();
 }

Number的paintComponent方法是:

public void paintComponent(Graphics g){
  super.paintComponent(g);
  numIc.paintIcon(this, g, 0, 0);       
}

然而,它并没有一步一步地移动,而是在10次延迟后突然移动到最终目的地!我搜索了问题,但没有找到有用的答案。

1 个答案:

答案 0 :(得分:1)

阅读关于并发的Swing教程中的部分,以便了解Event Dispatch Thread。 Thread.sleep()方法导致EDT进入睡眠状态,因此GUI无法自行重绘。

使用Swing Timer来安排动画。请查看上面链接中的目录,您还可以在How to Use Swing Timers找到一个部分。

另外,为什么要创建自定义组件来绘制图标?只需使用带有Icon的JLabel并将标签贴到绘画上。不要重新发明轮子。