我有代码:
Timer timer = new Timer(5000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<10;i++){
textArea1.append(" "+i + "\n" + newline);
textArea1.setCaretPosition(textArea1.getDocument().getLength());
}
}
});
...
...
timer.start();
它会一起追加0到9。我想逐个打印0到9。这意味着,在GUI JTextArea上,它将显示0,和1,然后是2 ......每个数字之间有一点延迟。我已经问过这个问题,但问题似乎太混乱了。所以我写了上面更简单的例子。请帮忙。如果你们感兴趣的话,这是这个问题的原始问题:java for-loop in GUI TextArea
答案 0 :(得分:4)
这可能会做你想要的:
Timer timer = new Timer(5000, new ActionListener() {
private int i = 0;
public void actionPerformed(ActionEvent e) {
if (i > 10) {
timer.stop();
} else {
textArea1.append(" "+i + "\n" + newline);
textArea1.setCaretPosition(textArea1.getDocument().getLength());
i++;
}
}
});
...
...
timer.start();
在评论中,提到timer
需要成为一个字段,如图所示。如果您希望它是方法的局部变量,那么该方法将如下所示。
请注意,timer
必须是最终才能在匿名内部类中使用。但要做到这一点,你必须通过构造没有任何监听器的计时器来解决问题,创建监听器然后添加它。
public void doit() {
final Timer timer = new Timer(5000, null);
ActionListener a = new ActionListener() {
private int i = 0;
public void actionPerformed(ActionEvent e) {
if (i > 10) {
timer.stop();
} else {
textArea1.append(" " + i + "\n");
textArea1.setCaretPosition(textArea1.getDocument().getLength());
i++;
}
}
};
timer.addActionListener(a);
timer.start();
}
如果你拿第一位代码然后把它放在一个方法中,你就会抱怨它不是最终的。
如果您只是将其设为最终版,则会抱怨您无法在stop()
上致电timer
,因为timer
可能尚未初始化。
评论中提到了其他解决方案。 (谢谢你提起这件事,@ herheru)
答案 1 :(得分:-5)
如何使用Thread.sleep(10)
Timer timer = new Timer(5000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<10;i++){
textArea1.append(" "+i + "\n" + newline);
textArea1.setCaretPosition(textArea1.getDocument().getLength());
Thread.sleep(10);
}
}
});
...
...
timer.start();