javaFX ProgressBar进度条的代码实现方式,真实案例,超详细~

最近在做一个视频压缩的桌面软件,因为有些视频比较大,压缩起来比较费时,所以软件里面要有进度条动态展示视频压缩的进度,以及提示信息。现在把我做视频压缩软件过程中的经验分享给大家,希望对你们有帮助。javaFX ProgressBar进度条是如何实现的?并要有实时进度展示,废话不多说,直接上代码

Label label = new Label("进度条demo");
label.setFont(Font.font(16));
ProgressBar progressBar = new ProgressBar(0);
progressBar.setPrefWidth(500);
progressBar.setPrefHeight(12);
progressBar.setStyle("-fx-accent: #337ecc");

Label progressBarLabel = new Label("");
progressBarLabel.setFont(Font.font(14));
progressBarLabel.setPadding(new Insets(0, 0, 5, 70));
HBox hBox = new HBox(progressBarLabel);
HBox.setMargin(progressBarLabel, new Insets(180, 0, 0, 0));

HBox hBox1 = new HBox(progressBar);
hBox1.setAlignment(Pos.CENTER);

Button confirm = new Button("开始");
confirm.setPrefWidth(100);
confirm.setPrefHeight(30);
// 开始按钮绑定事件
confirm.setOnAction(actionEvent -> {
    // 开始计算进度条进度
    Task worker = createWorker();
    // 监听任务里的展示信息,然后动态展示内容
    worker.messageProperty().addListener((observable, oldValue, newValue) -> {
        String message = worker.getMessage();
        progressBarLabel.setText(message);
    });
    progressBar.progressProperty().unbind();
    // 进度条绑定计算任务
    progressBar.progressProperty().bind(worker.progressProperty());
    Thread thread = new Thread(worker);
    // 开始计算
    thread.start();
});
HBox hBox2 = new HBox(confirm);
hBox2.setAlignment(Pos.CENTER);
HBox.setMargin(confirm, new Insets(30, 0, 0, 0));

// 垂直布局
VBox vBox = new VBox(label, hBox, hBox1, hBox2);
vBox.setAlignment(Pos.TOP_CENTER);

var scene = new Scene(vBox, 640, 480);
stage.setScene(scene);
stage.show();

/**
* 计算进度条任务
*
* */
private Task createWorker() {
   return new Task() {
       @Override
       protected Object call() {
           for (int i = 1; i <= 100; i++) {
               // 这里为更新进度条计算,第一个参数/第二个参数为当前进度,这里简单计算为从1到100,可以根据实际场景在循环里面计算进度
               updateProgress(i, 100);
               // 更新进度条展示信息,可以根据实际场景展示需要的信息
               updateMessage(i + "%");
               try {
                   Thread.sleep(100); // sleep 100ms,方便展示进度条效果
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
           return true;
       }
   };
}

先看看demo的效果,点击开始按钮开始计算进度,并显示当前进度百分比
在这里插入图片描述

再看看我制作的视频压缩软件的实际效果
在这里插入图片描述

总结

ProgressBar 要绑定一个Task类的任务对象,进度条计算逻辑在Task类里面实现,
updateProgress方法是更新进度条进度的,而updateMessage方法是更新进度条展示信息的,worker.messageProperty().addListener可以监听updateMessage方法的值,
在监听方法里面修改展示信息即可,然后新建一个Thread线程,传入Task类对象,最后开启线程。

这是我上传的进度条demo源码,有需要可以免费下载

由于我是做了很多年的java开发,所以最后选择了javaFX来做桌面软件,既可以跨平台,又可以降低学习成本,在我的javaFX专栏里面还有很多关于javaFX开发桌面软件的文章,你可以学到很多关于javaFX 桌面软件开发的知识,后续还会继续更新以及开设更多的专栏,敬请期待!
我的javaFX专栏

如果你有什么意见或建议,请在评论区发表评论!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新之助Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值