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()+"讀取失敗");
         }

   //////////////////////////////////////////////////////////
      }
   }
}

沒有留言:

張貼留言