[Java GUI] 在JTextArea中显示选定文件的内容

[Java GUI] 在JTextArea中显示选定文件的内容_第1张图片

/**
 * This program opens a file and show its content in a text area.
 * 
 * @author 	fduan
 * @link 	http://blog.csdn.net/fduan
 */
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ShowFileContent {
	public static void main(String[] args) {
		new MyFrame("Open File");
	}
}

class MyFrame extends JFrame implements ActionListener {

	private static final long serialVersionUID = -8193131179158828964L;

	private JButton btnOpen = new JButton("  Open  ");
	private JTextArea txtInfo = new JTextArea(50, 50);
	private JScrollPane sp = null;
	private JPanel btnPane = new JPanel();
	private final String [] fileExts = { "txt", "c", "cpp", "java" };

	private BufferedReader reader = null;
	private JFileChooser fileDlg = null;

	MyFrame(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		btnPane.add(btnOpen);
		btnOpen.setActionCommand("open");
		btnOpen.addActionListener(this);
		
		txtInfo.setFont( new Font( "Courier New", Font.PLAIN, 16 ) );
		txtInfo.setBackground( Color.BLACK );
		txtInfo.setForeground( Color.YELLOW );
		sp = new JScrollPane(txtInfo);
		
		Container cp = getContentPane();
		cp.add(btnPane, BorderLayout.NORTH);
		cp.add(sp, BorderLayout.CENTER);

		setPreferredSize(new Dimension(300, 200));
		setVisible(true);
		pack();
	}

	private void showFileContent(String fileName) {
		try {
			reader = new BufferedReader(new FileReader(fileName));
			int idxLine = 0;
			try {
				String line;
				while( ( line = reader.readLine() ) != null ) {
					String lineNo = null;
					++idxLine;
					if( idxLine < 10 )
						lineNo = "00" + idxLine;
					else if( idxLine < 100 )
						lineNo = "0" + idxLine;
					else
						lineNo = "" + idxLine;
					txtInfo.append( lineNo + ": " + line + "\r\n" );
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand() == "open") {
			fileDlg = new JFileChooser("E:\\");
			
			for( int i = 0; i < fileExts.length; ++i )
				fileDlg.addChoosableFileFilter(new MyFileFilter( fileExts[i] ));
			
			switch (fileDlg.showOpenDialog(this)) {
			case JFileChooser.APPROVE_OPTION:
				txtInfo.setText( null );
				String filePath = fileDlg.getSelectedFile().getAbsolutePath();
				setTitle( fileDlg.getSelectedFile().getName() );
				showFileContent( filePath );
				break;

			case JFileChooser.CANCEL_OPTION:
				break;

			default:
				break;
			}
		}
	}
}

class MyFileFilter extends FileFilter {

	private String fileExt;
	
	MyFileFilter(String ext) {
		fileExt = ext;
	}

	private String getExtName( String absPath ) {
		int idxDot = absPath.lastIndexOf( '.' );
		return absPath.substring( idxDot + 1 );
	}
	
	@Override
	public boolean accept(File f) {
		return f.isDirectory() || getExtName( f.getName() ).equals( fileExt );
	}

	@Override
	public String getDescription() {
		String descr = null;
		if( fileExt.equals( "txt" ) )
			descr = "Text File (*.txt)";
		else if( fileExt.equals( "cpp" ) )
			descr = "C++ Source File (*.cpp)";
		else if( fileExt.equals( "c" ) )
			descr = "C Source File (*.c)";
		else if( fileExt.equals( "java" ) )
			descr = "Java Source File (*.java)";
		return descr;
	}

}


你可能感兴趣的:(java,String,File,null,Class,import)