我想在JPanel上绘制几个对象,每个绘制之间都需要暂停。每个对象之间也存在一个间隙,我只需在for循环中进行计算即可。
考虑到这一点,我选择将java.util.Timer与自定义类一起使用,以扩展TimerTask类(因为我需要动态计算间隔)。
问题是,当我尝试以这种方式进行操作时,什么也没有显示,但是Timer正在运行,因为它在控制台日志中显示了一个字符串。但是,当我在for循环中简单地调用该函数时,对象会很好地显示。所以我真的不明白我做错了什么。
这是我的代码:
public class GameScreen extends JPanel {
Turn turn;
public GameScreen(Turn t) {
super();
this.turn = t;
}
public void paintComponent(Graphics g){
this.setBackground(Color.decode("#ADCCDB"));
if(this.turn.boolAction) {
this.action(g, this.turn.listObjects);
}
}
public void action(Graphics g, ArrayList<Objects> listObject) {
class PaintTask extends TimerTask{
int i;
public PaintTask(int i){
super();
this.i = i;
}
@Override
public void run() {
System.out.println(new Date() + " Task Executed");
listObject.get(this.i).paint(g, 30, 30 + 60*this.i);
}
}
Timer timer = new Timer();
for(int i = 0; i < listObject.size(); i++) {
timer.schedule(new PaintTask(i), 1000, 3000);
}
/*for(int i = 0; i < listObject.size(); i++) {
action.get(i).paintHide(g, 30, 30 + 60*i);
}*/
}
}
有人知道这是怎么回事吗?
谢谢!