• Java实现进度条加载效果


    目录

    前言

    一、Java Swing实现

    二、Java for循环遍历实现


    前言

            进度条在我们日常使用的软件中已经很频繁了,不过除了安装或更新软件,一般都是在网页中才会看到。本文就想分享一下,如何用Java代码实现进度条加载的效果。


    一、Java Swing实现

    Swing 可以用来做一些页面的加载进度条还是很不错的,起到美观的作用,其中的配置也可可以根据自身需求调整。

    代码: 

    1. import javax.swing.*;
    2. import java.awt.*;
    3. /**
    4. * 加载进度条
    5. */
    6. public class StartLoadingView extends JWindow implements Runnable {
    7. /*** 定义加载窗口大小*/
    8. public static final int LOAD_WIDTH = 1075;// 页面宽度
    9. public static final int LOAD_HEIGHT = 604;// 页面高度
    10. /*** 获取屏幕窗口大小*/
    11. public static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
    12. public static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
    13. /*** 定义进度条组件*/
    14. public JProgressBar progressbar;
    15. /*** 定义标签组件*/
    16. public JLabel label;
    17. // 构造函数
    18. public StartLoadingView() {
    19. // 创建标签,并在标签上放置一张背景图
    20. label = new JLabel(new ImageIcon("C:\\Users\\admin\\Desktop\\java.jpg"));// 这里放页面要展示的背景图
    21. label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT - 15);
    22. // 创建进度条
    23. progressbar = new JProgressBar();
    24. // 显示当前进度值信息
    25. progressbar.setStringPainted(true);
    26. // 设置进度条边框不显示
    27. progressbar.setBorderPainted(false);
    28. // 设置进度条已加载的背景色
    29. progressbar.setForeground(new Color(210, 0, 80, 255));
    30. // 设置进度条未加载的背景色
    31. progressbar.setBackground(new Color(188, 190, 194));
    32. progressbar.setBounds(0, LOAD_HEIGHT - 15, LOAD_WIDTH, 15);
    33. // 添加组件
    34. this.add(label);
    35. this.add(progressbar);
    36. // 设置布局为空
    37. this.setLayout(null);
    38. // 设置窗口初始位置
    39. this.setLocation((WIDTH - LOAD_WIDTH) / 2, (HEIGHT - LOAD_HEIGHT) / 2);
    40. // 设置窗口大小
    41. this.setSize(LOAD_WIDTH, LOAD_HEIGHT);
    42. // 设置窗口显示
    43. this.setVisible(true);
    44. }
    45. public static void main(String[] args) {
    46. StartLoadingView t = new StartLoadingView();
    47. new Thread(t).start();
    48. }
    49. @Override
    50. public void run() {
    51. for (int i = 0; i <= 100; i++) {
    52. try {
    53. // 加载进度条需要用到多少秒,20就是2秒
    54. Thread.sleep(20);
    55. } catch (InterruptedException e) {
    56. e.printStackTrace();
    57. }
    58. progressbar.setValue(i);
    59. }
    60. JOptionPane.showMessageDialog(this, "程序加载成功");
    61. this.dispose();
    62. // 如果这里不继续执行代码,将关闭本次运行
    63. }
    64. }

    二、Java for循环遍历实现

    1. public static void main(String[] args) {
    2. char incomplete = '░'; // U+2591 Unicode Character 表示还没有完成的部分
    3. char complete = '█'; // U+2588 Unicode Character 表示已经完成的部分
    4. int total = 100;
    5. StringBuilder builder = new StringBuilder();
    6. Stream.generate(() -> incomplete).limit(total).forEach(builder::append);
    7. for (int i = 0; i < total; i++) {
    8. builder.replace(i, i + 1, String.valueOf(complete));
    9. String progressBar = "\r" + builder;
    10. String percent = " " + (i + 1) + "%";
    11. System.out.print(progressBar + percent);
    12. try {
    13. // 这里为了表示越到后面越慢的场景,所以这里的sleep不是一个固定的数值。
    14. Thread.sleep(i * 5L);
    15. } catch (InterruptedException e) {
    16. e.printStackTrace();
    17. }
    18. }
    19. }

    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() 来实现;

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

  • 相关阅读:
    #5机器学习(西瓜书)自学记录
    经典的设计模式6——桥接模式
    C# 实体类转换的两种方式
    Hadoop搭建————搭建前的准备
    计算机毕业设计Java游泳馆管理平台(系统+程序+mysql数据库+Lw文档)
    关于mp4格式转m3u8切片加密的方案调研
    JVM栈帧的内部结构
    CVE-2020-1957 shiro权限绕过简单分析
    Python标准库之os
    SpringBoot+RabbitMQ集成(自动创建队列)
  • 原文地址:https://blog.csdn.net/weixin_42555014/article/details/133376030