java制作进度条_使用Java高速实现进度条
基于有人问到如何做进度条,以下给个简单的做法:
主要是使用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高速实现进度条相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java 线程 进度条_关于Java进度条多线程调用问题,一个很实用的问题,希望熟悉多线程编程的高手看看...
目前我在做一个C/S架构的Java应用,其中有一项查询操作非常耗时,可以增加个进度条以提高用户界面友好型.大体流程是这样的,在一个方法内 protected void action_queryButt ...
- java图片头像代码_用Java和OpenCV生成Github默认头像
前言 刚刚过完年,把这样那样的事情忙完,就赶紧把博客剩下的主要功能都先做完了,感觉一身轻松. 闲下来了就抽空看看Github上的项目,偶然间发现Github的默认头像很有特色,它并不像其它的网站一样使 ...
- JAVA redis缓存过期_失效java服务器
Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- java学习视频网站_学习Java的视频网站
原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...
- java数据源是什么_《java数据源—连接池》
<java数据源-连接池> 1.数据源的分类:直接数据源.连接池数据源. 2.连接池.数据源.JNDI a.数据源:Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它 ...
- java ee开发环境_设置Java EE 6开发环境
java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...
- java runnable线程锁_多线程 java 同步 、锁 、 synchronized 、 Thread 、 Runnable
线程 1 线程概述 1.1 什么是线程 v 线程是程序执行的一条路径, 一个进程中可以包含多条线程 v 一个应用程序可以理解成就是一个进程 v 多线程并发执行可以提高程序的效率, 可以同时完成多 ...
- java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
最新文章
- 推荐一个小而美的Python代码格式化工具
- 低版本浏览器支持css3 Media查询的方法, ie6-ie8 不支持css3 的时候用respond.js,html5shiv.js 【非常实用哦】。。。。。。。。。。。。...
- 【音效下载 / 编辑】网站
- 短序列组装Sequence Assembly(转载)
- 一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)
- 重定义 不同的基类型_镍及铁镍基耐蚀合金高温合金哈氏合金镍基合金之第一篇概述...
- vantUI组件:van-card 自定义内容 - 踩坑篇
- Cartographer ROS for Turtlebots 初探
- 人生苦短之我用Python篇(socket编程)
- maven pom 文件的 scope,scope=system 时打包打不进
- python写鼠标宏_最全Pycharm教程(24)——Pycharm编辑器功能之宏定义
- java 汉字区位码表_汉字编码解析
- Win8.1激活方法
- spring boot+Quartz+数据库存储
- 计算机测试穿越,计算机的迷雾,如何穿越?
- nifi mysql hive_Nifi入门
- Codeforces Round #469(Div.1 D) (Div. 2 F)Curfew(贪心)
- 如何获取某个月有多少天
- 运动目标检测跟踪主流算法
- ABBYY FastML:一种用于大型文档流处理的客户端机器学习新方案。
热门文章
- 易语言自定义数据类型转c,转换JSON结构为易语言代码自定义数据类型
- 使用Stream生成菜单、地区树
- labelme标注的json文件转换成png格式
- 数据库期末知识点汇总
- 第十三届“恩智浦”杯全国大学生智能汽车竞赛-信标对抗组比赛总结
- 音频测试方法(tiny)
- 为什么远程计算机后会黑屏,解决Win10电脑远程桌面黑屏的问题
- MTK平台各种分区和bin/img(线刷包)对应关系和作用说明
- 小米电视共享计算机权限,小米电视局域网共享文件 小米盒子局域网共享视频通用方法...
- 计算机打印机共享失败,局域网共享打印机连接失败怎么办