java进度条监视器

package com.gaohao.test;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ProgressMonitorInputStream;
import javax.swing.filechooser.FileFilter;

public class ProgressMonitorInputStreamTest {

	public static void main(String[] args){
		JFrame frame = new TextFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

class TextFrame extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public TextFrame(){
		setTitle("ProgressMonitorInputStreamTest");
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		JMenu fileMenu = new JMenu("File");
		menuBar.add(fileMenu);
		openItem = new JMenuItem("Open");
		openItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				try{
					openFile();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		});
		
		fileMenu.add(openItem);
		exitItem = new JMenuItem("Exit");
		exitItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				System.exit(0);				
			}
		});
		fileMenu.add(exitItem);
	}
	
	public void openFile() throws IOException{
		JFileChooser chooser = new JFileChooser();
		chooser.setCurrentDirectory(new File("."));
		chooser.setFileFilter(new FileFilter(){
			public boolean accept(File f){
				String fname = f.getName().toLowerCase();
				return fname.endsWith(".txt") || f.isDirectory();
			}
			public String getDescription(){
				return "Text Files";
			}
		});
		
		int r = chooser.showOpenDialog(this);
		if(r != JFileChooser.APPROVE_OPTION)return;
		final File f = chooser.getSelectedFile();
		
		FileInputStream fileIn = new FileInputStream(f);
		ProgressMonitorInputStream progressIn = new ProgressMonitorInputStream(this,"Reading " + f.getName(),fileIn);
		final Scanner in = new Scanner(progressIn);
		
		Runnable readRunnable = new Runnable(){
			public void run(){
				final JTextArea textArea = new JTextArea();
				while(in.hasNextLine()){
					String line = in.nextLine();
					textArea.append(line);
					textArea.append("\n");
				}
				in.close();
				
				EventQueue.invokeLater(new Runnable(){
					public void run(){
						setContentPane(new JScrollPane(textArea));
						validate();
					}
				});
			}
		};
		
		Thread readThread = new Thread(readRunnable);
		readThread.start();
	}
	
	private JMenuItem openItem;
	private JMenuItem exitItem;
	
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
}

 

你可能感兴趣的:(java,thread,swing,F#)