目录
前言
进度条在我们日常使用的软件中已经很频繁了,不过除了安装或更新软件,一般都是在网页中才会看到。本文就想分享一下,如何用Java代码实现进度条加载的效果。
一、Java Swing实现
Swing 可以用来做一些页面的加载进度条还是很不错的,起到美观的作用,其中的配置也可可以根据自身需求调整。
代码:
import javax.swing.*;
import java.awt.*;
/**
* 加载进度条
*/
public class StartLoadingView extends JWindow implements Runnable {
/*** 定义加载窗口大小*/
public static final int LOAD_WIDTH = 1075;// 页面宽度
public static final int LOAD_HEIGHT = 604;// 页面高度
/*** 获取屏幕窗口大小*/
public static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
public static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
/*** 定义进度条组件*/
public JProgressBar progressbar;
/*** 定义标签组件*/
public JLabel label;
// 构造函数
public StartLoadingView() {
// 创建标签,并在标签上放置一张背景图
label = new JLabel(new ImageIcon("C:\\Users\\admin\\Desktop\\java.jpg"));// 这里放页面要展示的背景图
label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT - 15);
// 创建进度条
progressbar = new JProgressBar();
// 显示当前进度值信息
progressbar.setStringPainted(true);
// 设置进度条边框不显示
progressbar.setBorderPainted(false);
// 设置进度条已加载的背景色
progressbar.setForeground(new Color(210, 0, 80, 255));
// 设置进度条未加载的背景色
progressbar.setBackground(new Color(188, 190, 194));
progressbar.setBounds(0, LOAD_HEIGHT - 15, LOAD_WIDTH, 15);
// 添加组件
this.add(label);
this.add(progressbar);
// 设置布局为空
this.setLayout(null);
// 设置窗口初始位置
this.setLocation((WIDTH - LOAD_WIDTH) / 2, (HEIGHT - LOAD_HEIGHT) / 2);
// 设置窗口大小
this.setSize(LOAD_WIDTH, LOAD_HEIGHT);
// 设置窗口显示
this.setVisible(true);
}
public static void main(String[] args) {
StartLoadingView t = new StartLoadingView();
new Thread(t).start();
}
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
try {
// 加载进度条需要用到多少秒,20就是2秒
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressbar.setValue(i);
}
JOptionPane.showMessageDialog(this, "程序加载成功");
this.dispose();
// 如果这里不继续执行代码,将关闭本次运行
}
}
二、Java for循环遍历实现
public static void main(String[] args) {
char incomplete = '░'; // U+2591 Unicode Character 表示还没有完成的部分
char complete = '█'; // U+2588 Unicode Character 表示已经完成的部分
int total = 100;
StringBuilder builder = new StringBuilder();
Stream.generate(() -> incomplete).limit(total).forEach(builder::append);
for (int i = 0; i < total; i++) {
builder.replace(i, i + 1, String.valueOf(complete));
String progressBar = "\r" + builder;
String percent = " " + (i + 1) + "%";
System.out.print(progressBar + percent);
try {
// 这里为了表示越到后面越慢的场景,所以这里的sleep不是一个固定的数值。
Thread.sleep(i * 5L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
1.首先通过Stream.generate(),创建未完成的部分,这里用 StringBuilder 来创建字符串对象,通过 append 方式来填充,如下:Stream.generate(() -> incomplete).limit(total).forEach(builder::append);
2.将 total设置成 100,限制一下长度。再通过一个 for 循环来不断的替换未完成中的部分,将字符挨个替换为完成的字符,builder.replace(i, i + 1, String.valueOf(complete))。
PS.这里有三个需要需要的地方:
- 进度条始终展示在一行,并没有换号,所以我们要用 System.out.print() 方法输出,不能用 System.out.println(); 方法来输出;如果我们直接通过System.out.print(); 输出的话,会发现虽然在同一行出现,但是会越来越长,每次循环的字符串会接在后面,这样是不行的。所以这里我们需要使用到回车符号,大家都知道\r\n,用来回车和换行,其实这种两个符号\r 是回车,\n 是换行。回车是将光标移动到行首,换行则是将光标移动的下一行
- 进度条会根据网络和资源包大小下载的时候慢慢变化的,所以我们要有一定的速度,不能一下子就完成了,这里我们可以简单通过 Thread.sleep() 来实现;
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。