随着时间的推移将文本附加到TextArea(有延迟)

时间:2013-06-01 02:17:58

标签: java javafx javafx-2

我有一个TextArea,我希望能够在一段时间内附加字符或单词。我尝试使用Thread.sleep()但很快意识到这是非常错误的。

我想伪伪代码

textArea.appendText("hey");
mysteryWaitMethod(500);
textArea.appendText("delayed");

2 个答案:

答案 0 :(得分:3)

JavaFX确实内置了一个计时器 - 它被称为Timeline。它简单,直接,并提供了诸如Swing的Timer类之类的额外功能,最重要的是,它在UI线程上执行代码。

我对JavaFX没有太多了解,但通常你想要修改在UI线程上执行的UI的东西。这就是这个课程的作用......我建议在java.util.Timer上使用它(用于后台任务...而不是UI任务)。当多个线程试图弄乱用户界面时,往往会发生不好的事情(这就是这些计时器的原因)。

这篇文章提供了如何使用它的一个很好的例子:https://stackoverflow.com/a/9966213/1515592

答案 1 :(得分:1)

使用javax.swing.Timer

textArea.appendText("hey");

int delay = 500; //milliseconds
ActionListener taskPerformer = new ActionListener() {
     public void actionPerformed(ActionEvent evt) {
         textArea.appendText("delayed");
     }
 };
 Timer t = new Timer(delay, taskPerformer);
 t.setRepeats(false);
 t.start();

http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html

或java.util.Timer

new Timer().schedule(
    new TimerTask() {
        @Override
        public void run() {
            textArea.appendText("delayed");
        }
}, 500);

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html