2013-04-01 4 views
1

Je veux créer des points de chargement comme celui-ci:JavaFX 2 loading dot dynamique

At 0 second the text on the screen is: Loading. 
At 1 second the text on the screen is: Loading.. 
At 2 second the text on the screen is: Loading... 
At 3 second the text on the screen is: Loading. 
At 4 second the text on the screen is: Loading.. 
At 5 second the text on the screen is: Loading... 

et ainsi de suite jusqu'à ce que je ferme la Stage.

Quelle est la meilleure/la plus simple façon de faire cela dans JavaFX? J'ai regardé des animations/préchargeurs dans JavaFX mais cela semble complexe quand j'essaye d'y parvenir.

J'ai essayé de créer une boucle entre ces trois Text:

Text dot = new Text("Loading."); 
Text dotdot = new Text("Loading.."); 
Text dotdotdot = new Text("Loading..."); 

mais l'écran reste statique ...

Comment puis-je faire ce travail correctement JavaFX? Merci.

Répondre

4

Cette question est similaire à: javafx animation looping.

Voici une solution utilisant JavaFX animation framework - cela me semble assez simple et pas trop complexe.

loading animation

import javafx.animation.*; 
import javafx.application.Application; 
import javafx.event.*; 
import javafx.scene.*; 
import javafx.scene.control.Label; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 
import javafx.util.Duration; 

/** Simple Loading Text Animation. */ 
public class DotLoader extends Application { 
    @Override public void start(final Stage stage) throws Exception { 
    final Label status = new Label("Loading"); 
    final Timeline timeline = new Timeline(
     new KeyFrame(Duration.ZERO, new EventHandler() { 
     @Override public void handle(Event event) { 
      String statusText = status.getText(); 
      status.setText(
      ("Loading . . .".equals(statusText)) 
       ? "Loading ." 
       : statusText + " ." 
     ); 
     } 
     }), 
     new KeyFrame(Duration.millis(1000)) 
    ); 
    timeline.setCycleCount(Timeline.INDEFINITE); 

    VBox layout = new VBox(); 
    layout.getChildren().addAll(status); 
    layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;"); 
    stage.setScene(new Scene(layout, 50, 35)); 
    stage.show(); 

    timeline.play(); 
    } 

    public static void main(String[] args) throws Exception { launch(args); } 
} 
+0

Très utile, merci! –

0

Avez-vous envisagé d'utiliser un indicateur de progression ou une barre de progression? Je pense qu'ils peuvent être une bonne solution pour montrer une animation et éviter les problèmes.

J'ai été capable de le faire en JavaFX, pas avec Animations, mais en utilisant les classes de simultanéité de JavaFX. Je vous laisse le code in a gist. Je pense que ce n'est pas très intuitif, car je préfère un indicateur de progression. Et peut-être que ce n'est pas la meilleure solution, mais peut-être que cela vous aidera.

Vive