使用Java快速实现进度条(转)
基于有人问到怎样做进度条,下面给个简单的做法:
主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax.swing.SwingWorker)
有人肯定会说,不是用线程做的吗?使用线程共享一个变量,确实可以。不过这种方式不太优雅,当然,你可以再用线程封装也行。不过,SwingWorker已经帮我们封装好啦~~使用现成的东西来做还是方便^_^
先看效果:





下面看代码:很简单,相信各位大大肯定是懂的~
- 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下直接运行
http://blog.csdn.net/kakashi8841/article/details/6388797
使用Java快速实现进度条(转)的更多相关文章
- 使用Java高速实现进度条
基于有人问到如何做进度条,以下给个简单的做法: 主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax. ...
- Java web实时进度条整个系统共用(如java上传进度条、导入excel进度条等)
先上图: 这上文件上传的: 这是数据实时处理的: 1:先说说什么是进度条:进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,显示方式 ...
- Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)
先上图: 文件上传的: 2017-05-04再次改进.在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)... 2019-03-26更新进度条显示体验 从服务器上压缩下载: 从 ...
- 《2018面向对象程序设计(java)课程学习进度条》
学习收获最大的程序阅读或编程任务 课堂/课余学习时间(小时) 发布博客/评论他人博客数量 (阅读/编写)代码行数 周次 九九乘法表 ...
- 2018面向对象程序设计(Java)学习进度条
周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课堂/课余学习时间(小时) 最满意的编程任务 第一周 200/30 1/0 6/3 九九乘法表 第二周 200/30 1/0 4/3 实验2 ...
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
- Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)
本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- Java实现在复制文件时使用进度条
在对大文件操作时,可能会需要些时间,此时为用户提供进度条提示是非常常见的一项功能,这样用户就可以了解操作文件需要的时间信息.本实例为大家介绍了在复制大的文件时使用的进度条提示,需要注意的是,只有在读取 ...
随机推荐
- pygame系列_mouse鼠标事件
pygame.mouse提供了一些方法获取鼠标设备当前的状态 ''' pygame.mouse.get_pressed - get the state of the mouse buttons get ...
- centos下ant的安装
1.创建一个文件夹,用于安装ant.我们这里临时在/usr文件夹下创建ant文件夹. 2.下载 cd /usr/ant进入该文件夹,使用wget ant的下载地址 下载ant到当前文件夹下.附an ...
- Java重命名文件
File file = new File("D:\\aa\a.txt"); file.renameTo(new File("D:\\aa\\b.txt" ...
- hihocoder第41周 骨牌覆盖(矩阵快速幂)
由于棋盘只有两行,所以如果第i列的骨牌竖着放,那么就转移为第1列到第i-1列骨牌有多少种摆法 如果第一行第i列骨牌横着放,那么第二行第i列也要横着放,那么就转移为了第1列到第i-2列骨牌有多少种方法 ...
- Unity UGUI——开源
开源许可证:MIT/X11 来源托管网站:BitBucket
- TCP/IP详细说明--滑模、拥塞窗口、慢启动、Negle算法
TCP的数据流大致能够分为两类,交互数据流与成块的数据流. 交互数据流就是发送控制命令的数据流.比方relogin,telnet.ftp命令等等.成块数据流是用来发送数据的包,网络上大部分的TCP包都 ...
- jvm调音
jvm性能调优的目地:1)控制jvm的堆栈大小.比方当你的程序年轻代对象在某个时间段产生的比較多的时候,就须要控制年轻代的堆大小. 同一时候还要控制总的JVM大小避免内存溢出 2)控制GC的行为. G ...
- filestream.read(buffer,offset,count)的正确解释
filestream.read(buffer,offset,count) offset是buffer的偏移量 所以,filestream.read(buffer,1,count)会报下面的错 Syst ...
- 2014在百度之星资格赛的第二个问题Disk Schedule
事实上,我认为它可以用来费用流问题.但光建地图上加班. ..不科学啊.. . 因副作用太大,否则,必然在.最后,想啊想,或者使用dp对.... 别想了一维dp... .我不知道我是怎么想.无论如何,这 ...
- UVA434 - Matty's Blocks
option=com_onlinejudge&Itemid=8&page=show_problem&category=457&problem=375&mosms ...