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

主要是使用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,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[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 doInBackground() throws Exception {

List image = new ArrayList();

for(int i=0; i

image.add(ImageIO.read(getClass().getClassLoader().getResource(imagesName[i])));

publish("已经载入了 "+(i+1)+"/"+imagesName.length+" : "+imagesName[i]);

}

return image;

}

@Override

protected void process(List 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);

}

}

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

java制作进度条_使用Java高速实现进度条相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java 线程 进度条_关于Java进度条多线程调用问题,一个很实用的问题,希望熟悉多线程编程的高手看看...

    目前我在做一个C/S架构的Java应用,其中有一项查询操作非常耗时,可以增加个进度条以提高用户界面友好型.大体流程是这样的,在一个方法内 protected void action_queryButt ...

  3. java图片头像代码_用Java和OpenCV生成Github默认头像

    前言 刚刚过完年,把这样那样的事情忙完,就赶紧把博客剩下的主要功能都先做完了,感觉一身轻松. 闲下来了就抽空看看Github上的项目,偶然间发现Github的默认头像很有特色,它并不像其它的网站一样使 ...

  4. JAVA redis缓存过期_失效java服务器

    Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...

  5. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  6. java学习视频网站_学习Java的视频网站

    原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...

  7. java数据源是什么_《java数据源—连接池》

    <java数据源-连接池> 1.数据源的分类:直接数据源.连接池数据源. 2.连接池.数据源.JNDI a.数据源:Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它 ...

  8. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  9. java runnable线程锁_多线程 java 同步 、锁 、 synchronized 、 Thread 、 Runnable

    线程 1 线程概述 1.1 什么是线程 v  线程是程序执行的一条路径, 一个进程中可以包含多条线程 v  一个应用程序可以理解成就是一个进程 v  多线程并发执行可以提高程序的效率, 可以同时完成多 ...

  10. java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...

    近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...

最新文章

  1. 推荐一个小而美的Python代码格式化工具
  2. 低版本浏览器支持css3 Media查询的方法, ie6-ie8 不支持css3 的时候用respond.js,html5shiv.js 【非常实用哦】。。。。。。。。。。。。...
  3. 【音效下载 / 编辑】网站
  4. 短序列组装Sequence Assembly(转载)
  5. 一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)
  6. 重定义 不同的基类型_镍及铁镍基耐蚀合金高温合金哈氏合金镍基合金之第一篇概述...
  7. vantUI组件:van-card 自定义内容 - 踩坑篇
  8. Cartographer ROS for Turtlebots 初探
  9. 人生苦短之我用Python篇(socket编程)
  10. maven pom 文件的 scope,scope=system 时打包打不进
  11. python写鼠标宏_最全Pycharm教程(24)——Pycharm编辑器功能之宏定义
  12. java 汉字区位码表_汉字编码解析
  13. Win8.1激活方法
  14. spring boot+Quartz+数据库存储
  15. 计算机测试穿越,计算机的迷雾,如何穿越?
  16. nifi mysql hive_Nifi入门
  17. Codeforces Round #469(Div.1 D) (Div. 2 F)Curfew(贪心)
  18. 如何获取某个月有多少天
  19. 运动目标检测跟踪主流算法
  20. ABBYY FastML:一种用于大型文档流处理的客户端机器学习新方案。

热门文章

  1. 易语言自定义数据类型转c,转换JSON结构为易语言代码自定义数据类型
  2. 使用Stream生成菜单、地区树
  3. labelme标注的json文件转换成png格式
  4. 数据库期末知识点汇总
  5. 第十三届“恩智浦”杯全国大学生智能汽车竞赛-信标对抗组比赛总结
  6. 音频测试方法(tiny)
  7. 为什么远程计算机后会黑屏,解决Win10电脑远程桌面黑屏的问题
  8. MTK平台各种分区和bin/img(线刷包)对应关系和作用说明
  9. 小米电视共享计算机权限,小米电视局域网共享文件 小米盒子局域网共享视频通用方法...
  10. 计算机打印机共享失败,局域网共享打印机连接失败怎么办