Java将Typewriter效果添加到JTextArea

我需要一次向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))); } } }); } 

有类似的问题,但我找不到一个我可以用来弄清楚我的问题的例子

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 (即退出条件)