Java实现进度条加载效果

目录

前言

一、Java Swing实现

二、Java for循环遍历实现


前言

        进度条在我们日常使用的软件中已经很频繁了,不过除了安装或更新软件,一般都是在网页中才会看到。本文就想分享一下,如何用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() 来实现;

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。 

猜你喜欢

转载自blog.csdn.net/weixin_42555014/article/details/133376030