基于有人问到如何做进度条,以下给个简单的做法:

主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax.swing.SwingWorker)

有人肯定会说,不是用线程做的吗?使用线程共享一个变量,确实能够。只是这样的方式不太优雅,当然,你能够再用线程封装也行。只是,SwingWorker已经帮我们封装好啦~~使用现成的东西来做还是方便^_^

先看效果:

以下看代码:非常easy,相信各位大大肯定是懂的~

package org.ubird; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; public class TestSwingWorker extends SwingWorker<List<Image>,String>{ private JLabel status; private JPanel viewer; private String[] imagesName; private JProgressBar jpb; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run() { TestFrame frame = new TestFrame(); final JPanel panel = new JPanel(); final JLabel label = new JLabel(); final String[] imagesName = new String[38]; for(int i=0; i<imagesName.length; i++){ imagesName[i] = "res/1 ("+(i+1)+").jpg"; } JScrollPane sp = new JScrollPane(panel); sp.setSize(new Dimension(700,500)); frame.add(sp,BorderLayout.CENTER); JPanel stp = new JPanel(); final JProgressBar jpb = new JProgressBar(); jpb.setMinimum(1); jpb.setMaximum(imagesName.length); stp.add(jpb); stp.add(label); frame.add(stp,BorderLayout.SOUTH); JButton button = new JButton("load image"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { TestSwingWorker sw = new TestSwingWorker(label, panel, imagesName, jpb); sw.execute(); } }); frame.add(button,BorderLayout.NORTH); frame.setVisible(true); } }); } public TestSwingWorker(JLabel status, JPanel viewer, String[] imagesName, JProgressBar jpb){ this.status = status; this.viewer = viewer; this.imagesName = imagesName; this.jpb = jpb; } @Override protected List<Image> doInBackground() throws Exception { List<Image> image = new ArrayList<Image>(); for(int i=0; i<imagesName.length; i++){ image.add(ImageIO.read(getClass().getClassLoader().getResource(imagesName[i]))); publish("已经载入了 "+(i+1)+"/"+imagesName.length+" : "+imagesName[i]); } return image; } @Override protected void process(List<String> chunks) { status.setText(chunks.get(chunks.size()-1)); int x = Integer.parseInt(chunks.get(chunks.size()-1).substring(chunks.get(chunks.size()-1).indexOf("(")+1,chunks.get(chunks.size()-1).indexOf(")")).trim()); jpb.setValue(x); for(String str : chunks){ System.out.println(str); } } @Override protected void done() { try { for(Image image : get()){ JLabel label = new JLabel(new ImageIcon(image)); label.setSize(160, 120); label.setPreferredSize(new Dimension(160,120)); viewer.add(label); } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }

package org.ubird; import javax.swing.JFrame; public class TestFrame extends JFrame { public TestFrame(){ setTitle("Test Frame"); setSize(800,600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

该程序的可执行源代码、资源图片的下载地址:http://download.csdn.net/source/3245370

NOTE:解压后双击里面的:CompileAndRun.bat可在Win下直接执行

转载于:https://www.cnblogs.com/blfshiye/p/4034886.html

使用Java高速实现进度条相关推荐

  1. 使用Java快速实现进度条(转)

    基于有人问到怎样做进度条,下面给个简单的做法: 主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax. ...

  2. Java 中JProgressBar_Java进度条JProgressBar使用方法

    Java进度条JProgressBar使用方法 package swimg; import java.awt.BorderLayout; import java.awt.Color; import j ...

  3. Java使用OSS进度条方法上传文件很慢

    博主介绍: 22届计科专业毕业,来自湖南,主要是在CSDN记录一些自己在Java开发过程中遇到的一些问题,欢迎大家一起讨论学习,也欢迎大家的批评指正. 文章目录 前言 正文 业务场景 实现逻辑 遇到的 ...

  4. java中的进度条的显示

    最近需要用到进度条,于是就查看了一下oracle的文档,看了一下java中进度条的显示方法,现在就总结一下. java提供了三种关于进度条的显示类. 1:JProgressBar(进程条) 2:Pro ...

  5. java 上传 进度条_Ajax上传文件并显示进度条

    第四步:编写前端代码. 1.路径在 当前项目的:src\main\resources\asyn.html 上传进度条 align="center"> 0% bordercol ...

  6. java滑杆和进度条_HTML5实现自带进度条和滑块滑杆效果

    一.H5自带进度条 进度:% 运用progress标签,设置好min和max数值就好.可以用value获取其中的进度值 function staticProgress () { var pg = do ...

  7. Java做彩虹进度条,Android自定义控件-彩虹条进度条

    在Android手机中我们经常可以看到类似于彩虹条的进度条,尤其是在显示下载进度的时候,一般都会使用彩虹条的形式表示下载进度,下面就来讲解这种彩虹条是如何实现的: 1.首先我们先来看一下彩虹条的效果图 ...

  8. Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)...

    先上图: 文件上传的: 2017-05-04再次改进.在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)... 从服务器上压缩下载: 从excel文件导入数据: 从数据库导出e ...

  9. java 下载文件 进度条_使用处理程序下载文件时显示百分比的进度条

    我想在按钮上单击下载 .EXE 文件并在网页上显示下载进度条而不是浏览器进度条 . 这个开发背后的想法是浏览器在他的下载管理器中隐藏它的下载进度条 . 我想在下载达到100%后自动运行.EXE . 我 ...

最新文章

  1. mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程
  2. 功率半导体碳化硅(SiC)技术
  3. JDBC连接Oracle数据库测试
  4. SpringBoot笔记:SpringBoot2.3集成Kafka组件配置
  5. TCP/IP / 三次握手之状态转换图和原因
  6. 常用命令之------ln
  7. Kettle 之 javascript字段数据处理
  8. 【181220】VC++ 简易的人工智能模型源程序源代码
  9. 【增速】人工智能之计算机视觉工业领域落地一览
  10. vs2008 sp1
  11. Android 系统root教程-magisk最新版
  12. 商户都在用的进销存软件,哪一个性价比最高?
  13. 最方便的办法下载bilibili视频
  14. signature=a5d52dd3b1c2e95cc6ca952d8f8e8a05,6d53beb98227311df5d5a4ccf0177f23
  15. 如何用python做计算_如何用Python做些基本的数学运算
  16. DEDE源码分析与学习之二: member文件结构说明
  17. React native大版本迭代信息记录
  18. 《给程序员的职场情商课》读书笔记
  19. $.contains()
  20. 人們還有「自由」這個詞,但他們學到的卻是服從和奴役!

热门文章

  1. [Java核心技术(卷I)] - 简易的日历
  2. css --- 手机端,留言模块的样式
  3. javascript --- polyfill中几个常用方法
  4. MySQL via EF6 的试用报告
  5. Chrome指令/追踪Http请求相关
  6. 英语26个字母使用频度
  7. 使用Raphael实现html中绘图
  8. 性能测试基本流程介绍(《软件性能测试过程详解与安全剖析》)
  9. .NET 并行(多核)编程系列之六 Task基础部分完结篇
  10. 数字图像处理——2D降噪