2011年4月19日
<Java> JVA406-檔案讀取器
這題重點:
1. 進度器類別的使用
(ProgressMonitorInputStream、ProgressMonitor)
============================
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class JVA406 implements ActionListener,Runnable
{
JFrame f = null;
JLabel label = null;
JTextArea textarea = null;
JFileChooser fileChooser = null;
Thread athread;
public JVA406()
{
f = new JFrame("檔案讀取器");
Container contentPane = f.getContentPane();
textarea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textarea);
scrollPane.setPreferredSize(new Dimension(350,350));
JButton b = new JButton("Read File");
b.addActionListener(this);
label = new JLabel(" ",JLabel.CENTER);
//使用fileChooser元件,讓user可以選擇檔案
fileChooser = new JFileChooser();
contentPane.add(label,BorderLayout.NORTH);
contentPane.add(scrollPane,BorderLayout.CENTER);
contentPane.add(b,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new JVA406();
}
public void actionPerformed(ActionEvent e)
{ //請在此撰寫程式碼
//按下 "read file" button後,如何去啟動thread,請寫上
athread = new Thread(this);
athread.start();
}
public void run()
{
File file = null;
int result = fileChooser.showOpenDialog(f);
textarea.setText("");
/////////////////////////////////////////////////
if (result == JFileChooser.APPROVE_OPTION)
{
file = fileChooser.getSelectedFile();
label.setText("你所選擇的檔案名稱為:"+file.getName());
}
else if(result == JFileChooser.CANCEL_OPTION)
{
label.setText("你沒有選擇任何檔案");
}
///////////////////////////////////////////
FileInputStream inputStream;
if(file != null)
{
try{
inputStream = new FileInputStream(file);
}catch(FileNotFoundException fe){
label.setText("File Not Found");
return;
}
//請在此撰寫程式碼
//轉成字元後顯示在textarea上,並作出一個進度器(Progress Bar)
//顯示出目前讀取檔案的進度為何?
ProgressMonitorInputStream pmi;
pmi = new ProgressMonitorInputStream(f , "檔案讀取中..." , inputStream);
ProgressMonitor pm = pmi.getProgressMonitor();
pm.setMillisToDecideToPopup(10);
pm.setMillisToPopup(1);
int j ;
try{
while((j=pmi.read())!=-1){
textarea.append(String.valueOf((char)j));
Thread.sleep(5L);
if(pm.isCanceled()){
label.setText("檔案讀取中斷...");
break;
}
}
}catch(Exception e){
label.setText(file.getName()+"讀取失敗");
}
//////////////////////////////////////////////////////////
}
}
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言