熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 18:43:29  來源: Java核心技術 

  在讀取大型文件或者其它大批量數據輸入操作時希望能夠通過一個進度條顯示當前的進度現在在Java中非常容易實現僅僅需要幾行代碼即可Java的swing包提供了ProgressMonitorInputStream類該類提供了自動地彈出進度窗口和事件處理機制
  
  使用這個類也非常方便只需要把任何一個InputStream作為參數構造一個新的ProgressMonitorInputStream類其它不需要任何額外的代碼即可實現進度窗口的自動生成ProgressMonitorInputStream類可以和其它InputStream一樣使用
  
  ProgressMonitorInputStream類繼承層次
  
  [pre]javalangObject
  |
  +javaioInputStream
  |
  +javaioFilterInputStream
  |
  +javaxswingProgressMonitorInputStream[/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 javaawtFlowLayout;
  import javaawteventActionEvent;
  import javaawteventActionListener;
  import javaioFileInputStream;
  import javaioInputStream;
  
  import javaxswingJButton;
  import javaxswingJFrame;
  import javaxswingProgressMonitorInputStream;
  
  public class ProgressMonitorTest
  {
  public static void main(String[] args)
  {
  // 創建一個包含Click me的窗口
  final JFrame f =
  new JFrame(ProgressMonitor Sample);
  fgetContentPane()setLayout(new FlowLayout());
  JButton b = new JButton(Click me);
  fgetContentPane()add(b);
  fpack();
  
  // 設置按鈕的動作事件
  baddActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  // 這兒使用了新的線程處理按鈕的動作事件
  因為我們需要
  //主窗口的線程響應用戶這樣你可以多次點擊該按鈕
  //會啟動多個讀取文件的線程主窗口也保持響應
  new Thread()
  {
  public void run()
  {
  try {
  // 打開文件輸出流
  
  把InputStream包裝在ProgressMonitorInputStream中
  //在當前目錄中需要放置一個大文件建議超過M
  InputStream in = new FileInputStream(bigfiledat);
  ProgressMonitorInputStream pm =
  new ProgressMonitorInputStream(fReading a big filein);
  // 讀取文件如果總耗時超過
  將會自動彈出一個進度監視窗口
  //  顯示已讀取的百分比
  int c;
  while((c=pmread()) != )
  {
  // 處理代碼
  }
  pmclose();
  }
  catch(Exception ex)
  {
  exprintStackTrace();
  }
  }
  }start();
  }});
  
  // 設置缺省的窗口關閉行為並顯示窗口
  fsetDefaultCloseOperation
  (JFrameEXIT_ON_CLOSE);
  fsetVisible(true);
  }
  }
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25629.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.