/**
* This program opens a file and show its content in a text area.
*
* @author fduan
* @link http://blog.youkuaiyun.com/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 GUI] 在JTextArea中显示选定文件的内容
最新推荐文章于 2022-11-13 18:56:35 发布