2017-01-15 2 views
0

0,5秒ごとにラベルを付けたいが、3つのドットがある場合は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

あなたは

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); 
    } 
} 
を行うことができます
関連する問題