基于有人问到怎样做进度条,下面给个简单的做法:

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

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

先看效果:

下面看代码:很简单,相信各位大大肯定是懂的~

  1. package org.ubird;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.awt.Image;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.concurrent.ExecutionException;
  10. import javax.imageio.ImageIO;
  11. import javax.swing.ImageIcon;
  12. import javax.swing.JButton;
  13. import javax.swing.JLabel;
  14. import javax.swing.JPanel;
  15. import javax.swing.JProgressBar;
  16. import javax.swing.JScrollPane;
  17. import javax.swing.SwingUtilities;
  18. import javax.swing.SwingWorker;
  19. public class TestSwingWorker extends SwingWorker<List<Image>,String>{
  20. private JLabel status;
  21. private JPanel viewer;
  22. private String[] imagesName;
  23. private JProgressBar jpb;
  24. public static void main(String[] args) {
  25. SwingUtilities.invokeLater(new Runnable(){
  26. public void run() {
  27. TestFrame frame = new TestFrame();
  28. final JPanel panel = new JPanel();
  29. final JLabel label = new JLabel();
  30. final String[] imagesName = new String[38];
  31. for(int i=0; i<imagesName.length; i++){
  32. imagesName[i] = "res/1 ("+(i+1)+").jpg";
  33. }
  34. JScrollPane sp = new JScrollPane(panel);
  35. sp.setSize(new Dimension(700,500));
  36. frame.add(sp,BorderLayout.CENTER);
  37. JPanel stp = new JPanel();
  38. final JProgressBar jpb = new JProgressBar();
  39. jpb.setMinimum(1);
  40. jpb.setMaximum(imagesName.length);
  41. stp.add(jpb);
  42. stp.add(label);
  43. frame.add(stp,BorderLayout.SOUTH);
  44. JButton button = new JButton("load image");
  45. button.addActionListener(new ActionListener(){
  46. public void actionPerformed(ActionEvent e) {
  47. TestSwingWorker sw = new TestSwingWorker(label, panel, imagesName, jpb);
  48. sw.execute();
  49. }
  50. });
  51. frame.add(button,BorderLayout.NORTH);
  52. frame.setVisible(true);
  53. }
  54. });
  55. }
  56. public TestSwingWorker(JLabel status, JPanel viewer, String[] imagesName, JProgressBar jpb){
  57. this.status = status;
  58. this.viewer = viewer;
  59. this.imagesName = imagesName;
  60. this.jpb = jpb;
  61. }
  62. @Override
  63. protected List<Image> doInBackground() throws Exception {
  64. List<Image> image = new ArrayList<Image>();
  65. for(int i=0; i<imagesName.length; i++){
  66. image.add(ImageIO.read(getClass().getClassLoader().getResource(imagesName[i])));
  67. publish("已经加载了  "+(i+1)+"/"+imagesName.length+" : "+imagesName[i]);
  68. }
  69. return image;
  70. }
  71. @Override
  72. protected void process(List<String> chunks) {
  73. status.setText(chunks.get(chunks.size()-1));
  74. int x = Integer.parseInt(chunks.get(chunks.size()-1).substring(chunks.get(chunks.size()-1).indexOf("(")+1,chunks.get(chunks.size()-1).indexOf(")")).trim());
  75. jpb.setValue(x);
  76. for(String str : chunks){
  77. System.out.println(str);
  78. }
  79. }
  80. @Override
  81. protected void done() {
  82. try {
  83. for(Image image : get()){
  84. JLabel label = new JLabel(new ImageIcon(image));
  85. label.setSize(160, 120);
  86. label.setPreferredSize(new Dimension(160,120));
  87. viewer.add(label);
  88. }
  89. } catch (InterruptedException e) {
  90. e.printStackTrace();
  91. } catch (ExecutionException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. }
  1. package org.ubird;
  2. import javax.swing.JFrame;
  3. public class TestFrame extends JFrame {
  4. public TestFrame(){
  5. setTitle("Test Frame");
  6. setSize(800,600);
  7. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  8. }
  9. }

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

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

http://blog.csdn.net/kakashi8841/article/details/6388797

使用Java快速实现进度条(转)的更多相关文章

  1. 使用Java高速实现进度条

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

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

    先上图: 这上文件上传的: 这是数据实时处理的: 1:先说说什么是进度条:进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,显示方式 ...

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

    先上图: 文件上传的: 2017-05-04再次改进.在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)... 2019-03-26更新进度条显示体验 从服务器上压缩下载: 从 ...

  4. 《2018面向对象程序设计(java)课程学习进度条》

     学习收获最大的程序阅读或编程任务    课堂/课余学习时间(小时)    发布博客/评论他人博客数量   (阅读/编写)代码行数        周次                  九九乘法表   ...

  5. 2018面向对象程序设计(Java)学习进度条

    周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课堂/课余学习时间(小时) 最满意的编程任务 第一周 200/30 1/0 6/3 九九乘法表 第二周 200/30 1/0 4/3 实验2 ...

  6. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  7. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  8. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  9. Java实现在复制文件时使用进度条

    在对大文件操作时,可能会需要些时间,此时为用户提供进度条提示是非常常见的一项功能,这样用户就可以了解操作文件需要的时间信息.本实例为大家介绍了在复制大的文件时使用的进度条提示,需要注意的是,只有在读取 ...

随机推荐

  1. .NET 单点登录

    <appSettings>     <!--是否启用单点登录接口-->     <add key="IsStartCas" value="f ...

  2. 开源Office Word——DocX

    1.前言 请阅读前请看以下这位大神的文章 http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html 另附两个附件 1.DocX.DL ...

  3. BZOJ 1269 文本编辑器 Splay

    题目大意:维护一个文本编辑器,支持下列操作: 1.将光标移动到某一位置 2.在光标后插入一段字符串 3.删除光标后的一段字符 4.翻转光标后的一段字符 5.输出光标后的一个字符 6.光标-- 7.光标 ...

  4. TP-LINK telnet远程 重启路由器(转)

    突然断网,以前房东的路由器管理页面可以打开,今天突然间就打不开了.ping了下,可以ping通,于是就想起了房东的路由器是TP-LINK的 可以 telnet登陆的.每次,断网,我都会重启房东的路由器 ...

  5. Ext JS4百强应用: 做可编辑的,可checked的treegrid--第11强

    做一个可编辑的,可checked的treegrid,代码相当简洁: 请看代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN&quo ...

  6. 标准I/O缓冲:全缓冲、行缓冲、无缓冲

    说明:我仅仅对网络资源进行了整合,方便学习-.- 基于流的操作终于会调用read或者write函数进行I/O操作.为了使程序的执行效率最高,流对象一般会提供缓冲区,以降低调用系统I/O库函数的次数. ...

  7. Cocos2d-x项目总结中的一些遇到的问题

    这几天在用Cocos2D-X尝试着做一个小游戏,当然不是创新,仅仅是单纯的模仿,就是为了将自己这段时间学到的技术应用于实践中. 在这个过程中.遇到了一些问题,在此特做一些总结,以免以后遇到类似的问题. ...

  8. 管理Android通信录

    Android提供了Contacts应用程序来管理联系人,并且Android系统还为联系人管理提供了ContentProvider,这就同意其他应用程序以ContentResolver来管理联系人数据 ...

  9. 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)

    原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...

  10. C#中对于float,double,decimal的误解

    原文:C#中对于float,double,decimal的误解 一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 如果我们在代 ...