Swing 中进度指示器的使用(三)

    上次分别讲了Swing中进度指示器的两个类JProgressBar和ProgressMonitor
这次给各位介绍一下最常用也是最简单的ProgressMonitorInputStream
他即是一个包装流也是一个带有进多条的对话框,例如我们想从一个文件中
多出所有的内容可是这个文件特别大(同样适用于从网络上读取内容),在
读取文件的同时我们弹出一个对话框,显示一个进度条
主要的步骤很少,如下,
FileInputStream in = new FileInputStream(f);
ProgressMonitorInputStream progressin = new            ProgressMonitorInputStream(parent,caption,in);
InputStreamReader reader = new InputStreamReader(progressin);

  1. import java.awt.EventQueue;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.util.Scanner;
  8. import javax.swing.JFileChooser;
  9. import javax.swing.JFrame;
  10. import javax.swing.JMenu;
  11. import javax.swing.JMenuBar;
  12. import javax.swing.JMenuItem;
  13. import javax.swing.JScrollPane;
  14. import javax.swing.JTextArea;
  15. import javax.swing.ProgressMonitorInputStream;
  16. import javax.swing.filechooser.FileFilter;
  17. public class TextFrame extends JFrame implements ActionListener {
  18.     public static final int DEFAULT_WIDTH = 350;
  19.     public static final int DEFAULT_HEIGHT = 450;
  20.     private JMenuBar menuBar;
  21.     private JMenu fileMenu;
  22.     private JMenuItem openItem;
  23.     private JFileChooser chooser;
  24.     private JMenuItem exitItem;
  25.     private JTextArea textArea;
  26.     private ProgressMonitorInputStream progressIn;
  27.     public TextFrame() {
  28.         this.menuBar = new JMenuBar();
  29.         this.fileMenu = new JMenu("File");
  30.         this.openItem = new JMenuItem("open");
  31.         this.exitItem = new JMenuItem("exit");
  32.         this.chooser = new JFileChooser();
  33.         textArea = new JTextArea();
  34.         init();
  35.         eventHandle();
  36.     }
  37.     private void init() {
  38.         // add menu
  39.         this.menuBar.add(this.fileMenu);
  40.         this.fileMenu.add(this.openItem);
  41.         this.fileMenu.add(this.exitItem);
  42.         this.setJMenuBar(this.menuBar);
  43.     }
  44.     private void eventHandle() {
  45.         this.openItem.addActionListener(this);
  46.         this.exitItem.addActionListener(this);
  47.     }
  48.     public void showMe() {
  49.         this.setTitle("Bounce");
  50.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  51.         this.setSize(DEFAULT_HEIGHT, DEFAULT_WIDTH);
  52.         this.setVisible(true);
  53.     }
  54.     public void actionPerformed(ActionEvent e) {
  55.         Object source = e.getSource();
  56.         if (source.equals(this.openItem)) {
  57.             this.chooser.setCurrentDirectory(new File("."));
  58.             chooser.setFileFilter(new FileFilter() {
  59.                 public boolean accept(File f) {
  60.                     String filename = f.getName().toLowerCase();
  61.                     return filename.endsWith(".txt") || f.isDirectory();
  62.                 }
  63.                 public String getDescription() {
  64.                     return "Text File";
  65.                 }
  66.             });
  67.             int r = chooser.showOpenDialog(this);
  68.             if (r != JFileChooser.APPROVE_OPTION)
  69.                 return;
  70.             File file = chooser.getSelectedFile();
  71.             try {
  72.                 FileInputStream filein = new FileInputStream(file);
  73.                 progressIn = new ProgressMonitorInputStream(this"read file "
  74.                         + file.getName(), filein);
  75.                 final Scanner in = new Scanner(progressIn);
  76.                 Runnable readRunnable = new Runnable() {
  77.                     public void run() {
  78.                         final JTextArea textArea = new JTextArea();
  79.                         while (in.hasNextLine()) {
  80.                             String line = in.nextLine();
  81.                             textArea.append(line);
  82.                             textArea.append("/n");
  83.                         }
  84.                         in.close();
  85.                         // set content pane in the event dispatch thread
  86.                         EventQueue.invokeLater(new Runnable() {
  87.                             public void run() {
  88.                                 setContentPane(new JScrollPane(textArea));
  89.                                 validate();
  90.                             }
  91.                         });
  92.                     }
  93.                 };
  94.                 Thread readThread = new Thread(readRunnable);
  95.                 readThread.start();
  96.             } catch (FileNotFoundException e1) {
  97.                 e1.printStackTrace();
  98.             }
  99.         }
  100.     }
  101.     public static void main(String[] args) {
  102.         new TextFrame().showMe();
  103.     }
  104. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值