以下是一个初学者的角度对JFileChooser控件的使用心得。
JFileChooser(以下简称JFC)是个非常常用的控件,我们可以把它理解成一个独立的JFrame,换句话说,并不用单独生成一个JFrame用来承载JFC
JFC一般有两种使用方式,一种是打开文件方式,一种是存储路径方式
下面是一段JFC的代码,你可以参考注释来理解一个打开文件方式的JFC是如何生成并显示出来的
jfc = new JFileChooser();
jfc.setFileFilter(
new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
if (
f.getName().endsWith(".xls") || f.isDirectory()
) {
return true;
}
return false;
}
public String getDescription() {
return "xls文件";
}
});//红色部分是提供给文件选择器过滤的文件类型,绿色部分就是该选择器能接受的文件类型,或
//者文件夹
if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {//showOpenDialog(null)方法是
//将jfc实例呈现出来,并监视用户在jfc上的动作,该方法将返回用户的动作代码,包括APPROVE、//
CANCEL、ERROR三种,蓝色代码的意思是当返回APPROVE时,将执行如下操作
//如何返回其他值呢,这个你就不用管了,控件会按你想象的方式自动处理的
String filepath = jfc.getSelectedFile().getPath();
}
下面是一个实例:
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
class test extends JFrame{
JButton jb=new JButton("打开txt文件");
JTextArea jt=new JTextArea();
test(){
setSize(400,300);
setVisible(true);
setLayout(new BorderLayout());
add(jb,BorderLayout.SOUTH);
add(jt,BorderLayout.NORTH);
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文件(*.txt)", "txt");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
try{ FileInputStream fd=new FileInputStream(chooser.getSelectedFile());
byte[] b=new byte[4096];
fd.read(b);
jt.setText(new String(b));
fd.close();
}catch( IOException ex){}
}
}
});
}
public static void main(String args[]){
new test();
}
}
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
class test extends JFrame{
JButton jb=new JButton("打开txt文件");
JTextArea jt=new JTextArea();
test(){
setSize(400,300);
setVisible(true);
setLayout(new BorderLayout());
add(jb,BorderLayout.SOUTH);
add(jt,BorderLayout.NORTH);
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文件(*.txt)", "txt");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
try{ FileInputStream fd=new FileInputStream(chooser.getSelectedFile());
byte[] b=new byte[4096];
fd.read(b);
jt.setText(new String(b));
fd.close();
}catch( IOException ex){}
}
}
});
}
public static void main(String args[]){
new test();
}
}