package application;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class ProgressIndicatorTest extends Application{
private Task<Void> task;
private Button startButton;
private Button cancelButton;
private ProgressIndicator progressIndicator;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("ProgressIndicator Example");
Group root = new Group();
Scene scene = new Scene(root, 350, 100, Color.WHITE);
BorderPane mainPane = new BorderPane();
root.getChildren().add(mainPane);
final Label label = new Label("Progress: ");
progressIndicator = new ProgressIndicator(0);
final HBox hb = new HBox();
hb.setSpacing(10);
hb.setAlignment(Pos.CENTER);
hb.getChildren().addAll(label, progressIndicator);
mainPane.setTop(hb);
startButton = new Button("Start");
cancelButton = new Button("Stop");
final HBox hb2 = new HBox();
hb2.setSpacing(10);
hb2.setAlignment(Pos.CENTER);
hb2.getChildren().addAll(startButton, cancelButton);
mainPane.setBottom(hb2);
startButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent actionEvent) {
startButton.setDisable(true);
progressIndicator.setProgress(0);
cancelButton.setDisable(false);
task = createTask();
progressIndicator.progressProperty().bind(task.progressProperty());
task.messageProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
System.out.println(newValue);
}
});
task.setOnSucceeded(event -> {
System.out.println("fertig");
startButton.setDisable(false);
cancelButton.setDisable(true);
progressIndicator.progressProperty().unbind();
});
task.setOnCancelled(event -> {
System.out.println("angehalten.");
startButton.setDisable(false);
cancelButton.setDisable(true);
progressIndicator.progressProperty().unbind();
});
new Thread(task).start();
}
});
cancelButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
task.cancel(true);
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
public Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
updateMessage(i * 1000 + " ms");
updateProgress(i + 1, 10);
}
return null;
}
};
}
}