国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

怎樣在Java實例開發的過程中使用進度條

2019-11-18 12:00:52
字體:
來源:轉載
供稿:網友

  在讀取大型文件或者其它大批量數據輸入操作時,希望能夠通過一個進度條顯示當前的進度,現在在java中非常輕易實現,僅僅需要幾行代碼即可。Java的swing包提供了PRogressMonitorInputStream類,該類提供了自動地彈出進度窗口和事件處理機制。
  
  使用這個類也非常方便,只需要把任何一個InputStream作為參數,構造一個新的ProgressMonitorInputStream類,其它不需要任何額外的代碼,即可實現進度窗口的自動生成。ProgressMonitorInputStream類可以和其它InputStream一樣使用。
  
  ProgressMonitorInputStream類繼續層次
  
  [pre]java.lang.Object
  
  +--java.io.InputStream
  
  +--java.io.FilterInputStream
  
  +--javax.swing.ProgressMonitorInputStream[/pre]
  
  構造方法
  
  ProgressMonitorInputStream
  (Component parentComponent,
  Object message, InputStream in)
  parentComponent - 觸發被監視操作的組件
  message - (假如彈出進度顯示窗口),
  顯示在進度顯示窗口中的指示信息
  in - 需要監視的輸入流
  
  操作方法
  
  除了在InputStream和FilterInputStream中繼續的方法外,還增加了如下方法:
  
  ProgressMonitor getProgressMonitor()
  //得到當前對象使用的ProgressMonitor對象。
  int read()
  int read(byte[] b)
  int read(byte[] b, int off, int len)
  void reset()
  long skip(long n)
  //上面幾個方法都是覆蓋了FilterInputStream中的方法,
  因為需要更新進度指示。
  void close()
  //因為需要關閉進度監視對象和窗口,
  所以覆蓋了FilterInputStream父類中的close方法。
  
  示例代碼:
  
  import java.awt.FlowLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.io.FileInputStream;
  import java.io.InputStream;
  
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.ProgressMonitorInputStream;
  
  public class ProgressMonitorTest
  {
  public static void main(String[] args)
  {
  // 創建一個包含“Click me”的窗口
  final JFrame f =
  new JFrame("ProgressMonitor Sample");
  f.getContentPane().setLayout(new FlowLayout());
  JButton b = new JButton("Click me");
  f.getContentPane().add(b);
  f.pack();
  
  // 設置按鈕的動作事件
  b.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  // 這兒使用了新的線程處理按鈕的動作事件,
  因為我們需要
  //主窗口的線程響應用戶。這樣你可以多次點擊該按鈕,
  //會啟動多個讀取文件的線程。主窗口也保持響應。
  new Thread()
  {
  public void run()
  {
  try {
  // 打開文件輸出流,
  
  把InputStream包裝在ProgressMonitorInputStream中。
  //在當前目錄中需要放置一個大文件,建議超過50M
  InputStream in = new FileInputStream("bigfile.dat");
  ProgressMonitorInputStream pm =
  new ProgressMonitorInputStream(f,"Reading a big file",in);
  // 讀取文件,假如總耗時超過2秒,
  將會自動彈出一個進度監視窗口。
  //  顯示已讀取的百分比。
  int c;
  while((c=pm.read()) != -1)
  {
  // 處理代碼
  }
  pm.close();
  }
  catch(Exception ex)
  {
  ex.printStackTrace();
  }
  }
  }.start();
  }});
  
  // 設置缺省的窗口關閉行為,并顯示窗口。
  f.setDefaultCloSEOperation
  (JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永胜县| 和静县| 合水县| 聂荣县| 双鸭山市| 巍山| 淮北市| 武定县| 布尔津县| 永德县| 陇川县| 沙河市| 凤台县| 乌鲁木齐县| 无锡市| 宜兴市| 潜江市| 金溪县| 万州区| 临沧市| 西城区| 揭西县| 汾西县| 丹巴县| 游戏| 凤台县| 上杭县| 阳山县| 绿春县| 龙胜| 额敏县| 徐水县| 墨江| 大理市| 晋江市| 家居| 武威市| 德惠市| 洛宁县| 遵义市| 华亭县|