?? jindutiao.txt
字號:
在Java中使用進度條
srx81 原創 (參與分:660,專家分:4200) 發表:2003-8-13 上午9:38 更新:2003-8-16 上午8:33 版本:1.0 閱讀:6466次
在讀取大型文件或者其它大批量數據輸入操作時,希望能夠通過一個進度條顯示當前的進度,現在在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);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -