原文链接:DOC-03-19 进度条(Progress Bar)和进度指示器(Progress Indicator) | JavaFX中文资料
进度指示器(ProgressIndicator)和进度条(Progressbar),这两个控件用于在JavaFX应用程序中对操作的进度进行可视化
ProgressIndicator类及其直接子类ProgressBar具有显示任务正在处理过程中并且目前处理进度是多少的功能。ProgressBar类使用带有完成度的长条来展示进度,而ProgressIndicatro则以动态变化的饼图来展示进度
ProgressBar 和ProgressIndicator
创建进度展示控件
所示的代码片段来在你的JavaFX应用程序中插入进度展示控件。
实现ProgressBar 和ProgressIndicator
1
2
|
ProgressBar pb = new ProgressBar(0.6);
ProgressIndicator pi = new ProgressIndicator(0.6);
|
你也可以使用不带参数的空构造方法来创建进度展示控件。在这种情况下,你可以使用setProgress方法来分配进度值
有时候应用程序无法确定完成任务所需的时间,在这种情况下进度展示控件会保持在不确定模式(Indetermine mode),直到完成任务时长确定为止。展示了进度展示控件根据其进度变量值而处在的不同状态
进度展示控件的不同状态
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 ProgressTest 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) throws InterruptedException { Group root = new Group();//节点组容器对象的创建 Scene scene = new Scene(root, 300, 250);//创建场景对象 stage.setScene(scene);//设置场景对象到舞台上 stage.setTitle("进度条控件"); for (int i = 0; i < values.length; i++) { final Label label = labels[i] = new Label();//创建一个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();//创建水平布局box对象 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.9表示90%。如果进度变量使用负数则表示对应的进度展示控件处于不确定模式。可以使用isIndeterminate方法来检查进度展示控件是否处于不确定模式中
根据Slider的位置来设置ProgressBar和ProgressIndicator的值
根据Slider设置进度值
import javafx.application.Application; 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 ProgressBarTest extends Application { @Override public void start(Stage stage) { Group root = new Group();//节点组容器对象的创建 Scene scene = new Scene(root);//创建场景对象,场景对象上挂载节点组对象 stage.setScene(scene);//舞台对象上挂载场景对象 stage.setTitle("舞台上的标题"); 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(//滑块组件的事件交互监听器的添加 (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);//启动javaFX入口程序 } }
_________________
程序中的ChangeListener用于当Slider的值发生了改变时计算出应该给Progress Bar和Progress
Indicator设置的值,确保进度展示控件的值的范围在0.0到1.0之间
今天的文章javaFX学习之 进度条(ProgressBar)和进度指示器(ProgressIndicator)「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/70801.html