使用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,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 doInBackground() throws Exception { List image = new ArrayList(); for(int i=0; i 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下直接运行

你可能感兴趣的:(JavaSwing/JFC)