📜  JavaFX |进度条(1)

📅  最后修改于: 2023-12-03 15:16:03.549000             🧑  作者: Mango

JavaFX | 进度条

JavaFX 是一种用于构建富客户端应用程序的图形用户界面工具包,其中包含许多易于使用的UI组件,如进度条,可用于在GUI应用程序中显示进度和状态信息。本文将介绍JavaFX的进度条组件,包括如何创建进度条、更新进度条的值和在进度条上自定义文本。

创建进度条

要在JavaFX应用程序中创建进度条,我们可以使用javafx.scene.control.ProgressBar类。以下是创建进度条的示例代码:

ProgressBar progressBar = new ProgressBar();
progressBar.setPrefWidth(200);
progressBar.setProgress(0.5);

在上面的代码中,我们创建一个新的进度条,并将其宽度设置为200像素。我们还使用setProgress()方法将进度条的值设置为0.5。此方法接受一个介于0和1之间的double值,表示进度条的完成百分比。在这种情况下,进度条的值为50%。

更新进度条的值

要更新进度条的值,我们可以使用setProgress()方法并将其设置为新的值。以下是一个示例方法,该方法每秒更新进度条的值:

private void updateProgress() {
    Task<Void> task = new Task<Void>() {
        protected Void call() throws Exception {
            for (int i = 0; i <= 100; i++) {
                updateProgress(i, 100);
                Thread.sleep(10);
            }
            return null;
        }
    };

    progressBar.progressProperty().bind(task.progressProperty());

    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
}

在上面的代码中,我们创建了一个名为updateProgress()的方法。该方法创建一个新的Task对象,并遍历0到100的所有值。在每个迭代中,它使用updateProgress()方法将进度条的值更新为当前百分比。最后,该代码使用一个新的线程异步执行该任务。

在进度条上自定义文本

JavaFX的进度条组件允许开发人员以各种方式自定义文本。以下是一些示例:

在进度条中心显示文本
ProgressBar progressBar = new ProgressBar();
progressBar.setPrefWidth(200);
progressBar.setProgress(0.5);

Label label = new Label("50%");
label.setStyle("-fx-font-size: 20px; -fx-text-fill: white;");
label.layoutXProperty().bind((progressBar.widthProperty().subtract(label.widthProperty())).divide(2));
label.layoutYProperty().bind((progressBar.heightProperty().subtract(label.heightProperty())).divide(2));

StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(progressBar, label);

Scene scene = new Scene(stackPane);

在上面的代码中,我们创建了一个新的Label对象,并将其文本设置为“50%”。我们还使用setStyle()方法为文本设置样式,使其更易于查看。最后,我们使用StackPane将进度条和标签组合在一起。

在进度条顶部和底部显示文本
ProgressBar progressBar = new ProgressBar();
progressBar.setPrefWidth(200);
progressBar.setProgress(0.5);

Label topLabel = new Label("50%");
topLabel.setStyle("-fx-font-size: 20px; -fx-text-fill: white;");
topLabel.layoutXProperty().bind((progressBar.widthProperty().subtract(topLabel.widthProperty())).divide(2));
topLabel.layoutYProperty().bind(progressBar.layoutYProperty().subtract(topLabel.heightProperty()).subtract(10));

Label bottomLabel = new Label("Downloading File");
bottomLabel.setStyle("-fx-font-size: 16px; -fx-text-fill: white;");
bottomLabel.layoutXProperty().bind((progressBar.widthProperty().subtract(bottomLabel.widthProperty())).divide(2));
bottomLabel.layoutYProperty().bind(progressBar.layoutYProperty().add(progressBar.heightProperty()).add(10));

StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(progressBar, topLabel, bottomLabel);

Scene scene = new Scene(stackPane);

在上面的代码中,我们创建了两个Label对象,一个用于顶部文本,一个用于底部文本。我们使用类似的方法将它们分别绑定到了进度条的位置和高度。

结论

JavaFX的进度条组件是显示进度和状态信息的强大工具。本文介绍了如何创建进度条、更新进度条的值和在进度条上自定义文本。我们希望这些示例对您有所帮助。