文件选择器,用于当需要一个文件时,按照这个文件所在的路径,一层层选择,直至找到目标文件,或者在需要保存一个文件时,选择,要保存到的路径。
swing中使用的 JFileChooser类 来实现的文件选择器
几个常用构造方法:
构造方法 | 说明 |
JFileChooser() | 创建一个指向用户默认目录的 JFileChooser。 |
JFileChooser(File currentDirectory) | 使用指定 File 作为路径来创建 JFileChooser。 |
JFileChooser(String currentDirectoryPath) | 创建一个使用指定路径的 JFileChooser。 |
JFileChooser(String currentDirectoryPath, FileSystemView fsv) | 使用指定的当前目录路径和 FileSystem View 构造一个 JFileChooser。 |
常用方法:
方法名称 | 说明 |
int showOpenDialog(Component parent) | 弹出打开文件对话框。 |
int showSaveDialog(Component parent) | 弹出保存文件对话框。 |
接下来最简单的实现一下JFileChooser类的使用
import javax.swing.JFileChooser; //用来创建文件选择器
import javax.swing.JPanel; //中间容器 (嵌板)最常用的面板
import javax.swing.JButton; //按钮,以单击按钮的响应来打开文件选择器
import java.awt.event.ActionEvent; //响应按钮的动作事件类
import java.awt.event.ActionListener;
import javax.swing.JFrame; //顶层容器 (框架)
public class text_JFileChooser
{
public static void main(String[] args)
{
JFrame jframe = new JFrame("文件选择器"); //窗口
JPanel jpanel1 = new JPanel(); //一个面板
JButton jbutton1 = new JButton("游览"); //按钮,单击响应事件,打开文件选择器
JFileChooser jfilechooser1 = new JFileChooser("F:\\"); //文件选择器,设置初始路径为"F:\\"
class myactionlistener implements ActionListener //创建动作监听者者
{
@Override
public void actionPerformed(ActionEvent e)
{
// int a = jfilechooser1.showOpenDialog(null); //选择文件,选择路径
int a = jfilechooser1.showSaveDialog(null); //保存文件,指定路径
if(a == jfilechooser1.APPROVE_OPTION){}
//这个语句在这段代码中无意义,在运行结果后面会有解释
}
}
//添加
jbutton1.addActionListener(new myactionlistener());
jpanel1.add(jbutton1); //面板添加按钮
jframe.add(jpanel1); //窗口添加面板
jframe.setBounds(400, 300, 400, 300); //设置窗口大小
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
}
}
运行结果如下:
对上面部分代码语句的解释:
int a = jfilechooser1.showSaveDialog(null);
if(a == jfilechooser1.APPROVE_OPTION){}
上面的指定路径的方法会返还一个整型值,一般在调用后会设置一个变量接收用于做出判断,就像下面的 if 语句, 里面的 APPROVE_OPTION是一个常量,表示正常选区文件,上面的方法可能返回的常量有三个:
常量 | 表示 |
CANCEL—OPTION | 表示单击“取消”按钮退出对话框 |
APPROVE_OPTION | 表示无文件选取或正常选取文件 |
ERROR_OPTION | 表示发生错误或对话框已被解除而退出对话框 |
因此在文本选择器交互结束后,应进行判断是否从对话框中选择了文件,然后根据返回值情况进行处理(只是我的if语句没有处理,实际上是要判断处理的)。