生活随笔
收集整理的這篇文章主要介紹了
使用Java快速实现进度条
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于有人問到怎樣做進度條,下面給個簡單的做法:
主要是使用JProgressBar(Swing內置javax.swing.JProgressBar)和SwingWorker(Swing內置javax.swing.SwingWorker)
?
有人肯定會說,不是用線程做的嗎?使用線程共享一個變量,確實可以。不過這種方式不太優雅,當然,你可以再用線程封裝也行。不過,SwingWorker已經幫我們封裝好啦~~使用現成的東西來做還是方便^_^
?
先看效果:
?
?
?
?
?
?
?
?
下面看代碼:很簡單,相信各位大大肯定是懂的~
?
[java]?view plain?copy
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();??????????}??????}??????????????}??
?
?
?
?
[java]?view plain?copy
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);??????}??}??
總結
以上是生活随笔為你收集整理的使用Java快速实现进度条的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。