流程中的时间线暂停

时间:2017-01-15 07:22:51

标签: javafx duration timeline keyframe pause

我想每0.5秒添加一次点标记,但是当有三个点暂停该过程3秒钟时,然后移除这些点并再次启动(3次)。我尝试使用这种方式,但它只是添加,而不是暂停而不是删除:

    Label calling = new Label("Calling");
    Timeline timer = new Timeline();
    KeyFrame first = new KeyFrame(
            Duration.millis(500),
            a -> {
                calling.setText(calling.getText()+".");
                if(calling.getText().endsWith("...")){
                    new Timeline(new KeyFrame(Duration.seconds(3), b-> calling.setText("Calling"))).play();
                }
            }
    );


    timer.getKeyFrames().addAll(first);
    timer.setCycleCount(9);     
    timer.play();
    });

1 个答案:

答案 0 :(得分:1)

你可以做到

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class AddDotsToLabel extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("Calling");

        EventHandler<ActionEvent> eventHandler = e -> label.setText(label.getText()+".");
        Timeline timeline = new Timeline(
                new KeyFrame(Duration.millis(500), eventHandler),
                new KeyFrame(Duration.millis(1000), eventHandler),
                new KeyFrame(Duration.millis(1500), eventHandler),
                new KeyFrame(Duration.millis(2000), e -> label.setText("Calling")),
                new KeyFrame(Duration.millis(5000))
        );
        timeline.setCycleCount(3);
        timeline.play();

        label.setPadding(new Insets(20));
        primaryStage.setScene(new Scene(new HBox(label), 120, 40));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}