博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Java高速实现进度条
阅读量:5840 次
发布时间:2019-06-18

本文共 3304 字,大约阅读时间需要 11 分钟。

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

主要是使用(Swing内置javax.swing.JProgressBar)和(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); } }

 

 

该程序的可执行源代码、资源图片的下载地址:

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

转载地址:http://iovcx.baihongyu.com/

你可能感兴趣的文章
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
jsp改造之sitemesh注意事项
查看>>
iOS 9.0之后NSString encode方法替换
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
CRM Transaction处理中的权限控制
查看>>
[转]linux创建链接文件的两种方法
查看>>