Javafx 简明教程

JavaFX - ProgressIndicator

一个 progress indicator 是一个 UI 控件,用于向用户指示任务的进度。它通常与 Task API 一起使用,以向用户通知后台任务的进度以及完成用户操作所需的时间。在本教程中,我们将学习如何在 JavaFX 中创建和使用进度指示器。在此之前,我们来看看一般进度指示器是什么样子的 −

progress indicator

ProgressIndicator in JavaFX

在 JavaFX 中,进度指示器由名为 ProgressIndicator 的类表示。此类属于包 javafx.scene.control 。通过实例化此类,我们可以在 JavaFX 中创建一个进度指示器。ProgressIndicator 类的构造函数如下 −

  1. ProgressIndicator() − 它构造了一个没有初始进度值的新进度指示器。

  2. ProgressIndicator(double progress) − 它构造了一个具有指定初始进度值的新进度指示器。

Example

以下程序演示如何在 JavaFX 中创建一个进度指示器。将此代码保存在名为 ProgressindicatorJavafx.java 的文件中。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.stage.Stage;
public class ProgressindicatorJavafx extends Application {
   @Override
   public void start(Stage stage) {
      // Creating a progress indicator without an initial progress value
      ProgressIndicator progress = new ProgressIndicator();
      // Create a scene and stage
      Scene scene = new Scene(progress, 400, 300);
      stage.setScene(scene);
      stage.setTitle("Progress Indicator in Javafx");
      stage.show();
   }
   public static void main(String[] args) {
      launch(args);
   }
}

要从命令提示符编译并执行已保存的 Java 文件,请使用以下命令−

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ProgressindicatorJavafx.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ProgressindicatorJavafx

当我们执行上述代码时,它将生成以下输出。

progress output

ProgressIndicator with an Initial Progress Value

我们可以使用 ProgressIndicator 类的参数化构造函数将初始 progress value 设置为进度指示器。构造函数接受进度值作为参数,该值是介于 0.0 和 1.0 之间的一个双精度类型值。这里,0.0 表示没有进度,1.0 表示完成。如果进度值是负数,则进度指示器是不确定的,这意味着它不显示任何特定进度量。

Example

在以下示例中,我们正在创建一个具有特定进度值初始化的进度指示器。此外,我们还创建了两个标记为“增加”和“减少”的按钮。单击“增加”按钮会增加进度值,而单击“减少”则会递减进度值。将此代码保存在名为 Javafxprogress.java 的文件中。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Javafxprogress extends Application {
   @Override
   public void start(Stage stage) {
      // Create a progress indicator with an initial progress of 0.5
      ProgressIndicator progressIndctr = new ProgressIndicator(0.5);
      // Create a button that increases the progress by 0.1
      Button buttonOne = new Button("Increase");
      buttonOne.setOnAction(e -> {
         // Get the current progress value
         double progress = progressIndctr.getProgress();
         // Increase the progress by 0.1
         progress += 0.1;
         // Set the new progress value
         progressIndctr.setProgress(progress);
      });
      // Create second button that decreases the progress by 0.1
      Button buttonTwo = new Button("Decrease");
      buttonTwo.setOnAction(e -> {
         // Get the current progress value
         double progress = progressIndctr.getProgress();
         // Decrease the progress by 0.1
         progress -= 0.1;
         // Set the new progress value
         progressIndctr.setProgress(progress);
      });
      // Create an HBox to hold the progress indicator and the button
      HBox hbox = new HBox(10);
      hbox.getChildren().addAll(progressIndctr,buttonOne, buttonTwo);
      // Create a scene with the HBox and set it to the stage
      Scene scene = new Scene(hbox, 400, 300);
      stage.setScene(scene);
      stage.setTitle("Progress Indicator in JavaFX");
      stage.show();
   }
   public static void main(String[] args) {
      launch(args);
   }
}

通过使用以下命令从命令提示符编译并执行保存的 Java 文件 −

javac --module-path %PATH_TO_FX% --add-modules javafx.controls Javafxprogress.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls Javafxprogress

在执行上述代码时,它将生成以下输出。

progress indicator2