我需要一次将输出显示到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
(即退出条件)关于java - Java将打字机效果添加到JTextArea,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43333999/