javaFX学习之 进度条(ProgressBar)和进度指示器(ProgressIndicator)

原文链接: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之间

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值