我需要一次向JTextArea显示一个字符的输出,每个字符之间稍有延迟。我的尝试如下:
private static void printInput(final String input)
{
Timer timer = new Timer(60,new ActionListener(){
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i<input.length(); i++)
{
messageArea.append(Character.toString(input.charAt(i)));
}
}
});
}
有类似的问题,但我找不到一个我可以用来找出问题的例子
答案 0 :(得分:1)
Timer
是一个伪循环,就是它,它在预定义的延迟后触发一个循环,每个循环都是循环的迭代,每次迭代都需要更新UI并更新迭代器值。
现在,因为我不喜欢在static
上下文中工作,我建议的第一件事就是将基本概念包装到一个单独的类中。这样您就可以轻松封装状态
public class TypeWriter {
private Timer timer;
private int characterIndex = 0;
private String input;
private JTextArea textArea;
public TypeWriter(JTextArea textArea, String input) {
this.textArea = textArea;
this.input = input;
timer = new Timer(60, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (characterIndex < input.length()) {
textArea.append(Character.toString(input.charAt(characterIndex)));
characterIndex++;
} else {
stop();
}
}
});
}
public void start() {
textArea.setText(null);
characterIndex = 0;
timer.start();
}
public void stop() {
timer.stop();
}
}
所以,这是非常基本的,所有这一切都是,使用Timer
,检查是否还有更多需要打印的字符,如果有,则需要下一个字符并附加它到文本区域并更新迭代器值。如果我们在文本末尾,则会停止Timer
(即退出条件)