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

主要是使用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下直接执行

最新文章

  1. MySQL基础之存储过程
  2. Android 手机卫士13--进程设置
  3. 循环日期的shell
  4. ionic安装拍照选照片插件
  5. SQL Server 字段状态判断语句
  6. 03:计算(a+b)/c的值
  7. mysql中datetime和timestamp的区别
  8. C#程序遍历数组A中所有元素
  9. 9.如何解决出现AXIOS的Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
  10. file_put_contents写入文字换行
  11. [tornado]使用webscoket的使用总是403错误
  12. AppBoxFuture(五): 分布式文件存储-Store Everything
  13. linux-ssh登陆导语
  14. UVA1609-Foul Play(构造+递归)
  15. 为什么大公司一定要使用DevOps?
  16. Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE
  17. MongoDB运维心得(一)
  18. 浅谈JEECG多数据源的使用
  19. python-day81--Ajax
  20. [转]Python 模块收集

热门文章

  1. [Papers]NSE, $\pi$, Lorentz space [Suzuki, NA, 2012]
  2. Android http协议实现文件下载
  3. &lt;转&gt;Python运行的17个时新手常见错误小结
  4. web服务器分析与设计(一)
  5. Android中Cursor(游标)类的概念和用法
  6. poj1001 Exponentiation
  7. 二、python 函数
  8. pyinstaller使用小结
  9. 虚拟桌面基础架构(VDI)与终端服务和传统PC对比
  10. Bone.io是一个轻量级的框架构建高性能实时单页HTML5应用程序