JavaFX UI控制元件教程(十八)之Progress Bar和Progress Indicator
翻譯自 Progress Bar and Progress Indicator
在本章中,您將瞭解進度指示器和進度條,以及視覺化JavaFX應用程式中任何操作進度的UI控制元件。
本ProgressIndicator
類及其直接子類ProgressBar
所提供的功能,以表明特定的任務是處理和檢測是如何工作的很多已經做了。當ProgressBar
類將進度視覺化為完成條時,ProgressIndicator
該類以動態變化的餅圖的形式顯示進度,如圖17-1所示。
圖17-1進度條和進度指示器
建立進度控制
使用示例17-1中
示例17-1實現進度條和進度指示器
ProgressBar pb = new ProgressBar(0.6);
ProgressIndicator pi = new ProgressIndicator(0.6);
您還可以使用空建構函式建立不帶引數的進度控制元件。在這種情況下,您可以使用該setProgress
方法分配值。
有時,應用程式無法確定任務的完整完成時間。在這種情況下,進度控制將保持不確定模式,直到確定任務的長度。圖17-2顯示了進度控制元件的不同狀態,具體取決於其進度變數值。
圖17-2各種進度控制狀態
示例17-2啟用進度控制的不同狀態
import javafx.application.Application; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressIndicator; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { final Float[] values = new Float[] {-1.0f, 0f, 0.6f, 1.0f}; final Label [] labels = new Label[values.length]; final ProgressBar[] pbs = new ProgressBar[values.length]; final ProgressIndicator[] pins = new ProgressIndicator[values.length]; final HBox hbs [] = new HBox [values.length]; @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 300, 150); scene.getStylesheets().add("progresssample/Style.css"); stage.setScene(scene); stage.setTitle("Progress Controls"); for (int i = 0; i < values.length; i++) { final Label label = labels[i] = new Label(); label.setText("progress:" + values[i]); final ProgressBar pb = pbs[i] = new ProgressBar(); pb.setProgress(values[i]); final ProgressIndicator pin = pins[i] = new ProgressIndicator(); pin.setProgress(values[i]); final HBox hb = hbs[i] = new HBox(); hb.setSpacing(5); hb.setAlignment(Pos.CENTER); hb.getChildren().addAll(label, pb, pin); } final VBox vb = new VBox(); vb.setSpacing(5); vb.getChildren().addAll(hbs); scene.setRoot(vb); stage.show(); } public static void main(String[] args) { launch(args); } }
進度變數的正值介於0和1之間表示進度百分比。例如,0.4對應於40%。此變數的負值表示進度處於不確定模式。使用該isIndeterminate
方法檢查進度控制元件是否處於不確定模式。
指示使用者介面的進度
最初簡化示例17-2以呈現進度控制元件的所有可能狀態。在實際應用程式中,可以通過其他UI元素的值獲取進度值。
研究示例17-3中的程式碼,瞭解如何根據滑塊位置設定進度條和進度指示器的值。
示例17-3從滑塊接收進度值
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.Slider;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Progress Controls");
final Slider slider = new Slider();
slider.setMin(0);
slider.setMax(50);
final ProgressBar pb = new ProgressBar(0);
final ProgressIndicator pi = new ProgressIndicator(0);
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
pb.setProgress(new_val.doubleValue()/50);
pi.setProgress(new_val.doubleValue()/50);
}
});
final HBox hb = new HBox();
hb.setSpacing(5);
hb.setAlignment(Pos.CENTER);
hb.getChildren().addAll(slider, pb, pi);
scene.setRoot(hb);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
編譯並執行此應用程式時,它會生成如圖17-3所示的視窗。
圖17-3指示滑塊設定的進度
一個ChangeListener
物件確定該滑塊的值被改變,並且計算該進度條和進度指示符,使得進度控制的值在0.0到1.0的範圍內的進展。
相關的API文件。