JavaFX - mise à jour des données d'un élément en temps réel

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

/**
 * JavaFX App
 */
public class App extends Application {

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

  @Override
  public void start(Stage stage) {

    // Création de la tâche de fond
    Task < Void > labelRefreshTask = new Task < Void > () {
      @Override
      public Void call() throws InterruptedException {
        // Compteur avec une pause de 200ms
        int i = 0;
        while (i < 100) {
          Thread.sleep(200);
          // Nouveau message avec la valeur de i
          updateMessage(String.valueOf(i));
          i++;
        }
        return null;
      }
    };

    Label label = new Label();
    label.setFont(new Font(32));
    // Récupération de la valeur de i du compteur
    label.textProperty().bind(labelRefreshTask.messageProperty());

    // Création du Thread et démarrage
    Thread clockThread = new Thread(labelRefreshTask);
    // Le thread sera coupé lorsque l'application est fermée
    clockThread.setDaemon(true);
    clockThread.start();

    Scene scene = new Scene(new StackPane(label), 640, 480);
    stage.setScene(scene);
    stage.show();
  }

}

Commentaires