2017-01-15 1 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); 
    } 
} 
관련 문제