简介
JFileChooser类提供了一个供用户选择文件或文件夹的对话框。
构造方法
JFileChooser():构造一个指向用户默认目录的 JFileChooser。
JFileChooser(File currentDirectory):使用给定的 File 作为路径来构造一个 JFileChooser。
利用该类创建文件选择对话框以及获取用户选择文件的基本步骤
(1)创建一个JFileChooser类的对象。
(2)默认情况下每次只能选择一个文件,如果希望允许同时选择多个文件,可以通过调用方法setMultiSelectionEnabled(boolean b)设置,将入口参数设为true即表示允许多选。
(3)默认情况下只允许选择文件,如果希望允许选择文件夹,可以通过调用方法setFileSelection- Mode(int mode)设置,入口参数可选的静态常量有FILES_ONLY(只允许选择文件)、DIRECTORIES_ ONLY(只允许选择路径)和FILES_AND_DIRECTORIES(均可选择)。
(4)如果只希望在对话框中列出指定类型的文件,可以调用setFileFilter(FileFilter filter)方法设置文件过滤器。
(5)设置完成后调用showOpenDialog(Component parent)方法显示对话框,该方法将返回一个int型值,用来判断用户是否选择了文件或路径。
(6)如果用户选择了文件或路径,可以通过方法getSelectedFile()或getSelectedFiles()获得,方法getSelectedFile()返回的是File对象,方法getSelectedFiles()返回的是File型数组。
常用方法:
setFileSelectionMode(int mode)设置 JFileChooser,以允许用户只选择文件、只选择目录,或者可选择文件和目录,入口参数mode的值:FILES_AND_DIRECTORIES(指示显示文件和目录)、FILES_ONLY(指示仅显示文件)、DIRECTORIES_ONLY(指示仅显示目录)
showDialog(Component parent,String approveButtonText):弹出具有自定义 approve 按钮的自定义文件选择器对话框。
showOpenDialog(Component parent):弹出一个 "Open File" 文件选择器对话框。
showSaveDialog(Component parent):弹出一个 "Save File" 文件选择器对话框。
setMultiSelectionEnabled(boolean b):设置文件选择器,以允许选择多个文件。
getSelectedFiles():如果将文件选择器设置为允许选择多个文件,则返回选中文件的列表(File[])。
getSelectedFile():返回选中的文件。
文件过滤器
如果只希望在对话框中列出指定类型的文件,可以调用setFileFilter(FileFilter filter)方法设置文件过滤器。javax.swing.filechooser.FileFilter类是一个抽象类,该类的具体定义如下:
public abstract class FileFilter {
public abstract boolean accept(File f);
public abstract String getDescription();
}
例:通过文件选择器实现选择文件功能(点击上传按钮弹出文件选择对话框,选择相应的文件单击打开按钮在文本框区域显示选择的文件名)
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
public class t3 extends JFrame{
private JTextField textField;
private JPanel panel = new JPanel();
private JFileChooser fileChooser = new JFileChooser();
public t3() {
setTitle("选项卡面板");
setBounds(400, 400, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel label = new JLabel();
label.setText("文件:");
panel.add(label);
textField = new JTextField();
textField.setColumns(20);
panel.add(textField);
final JButton button = new JButton("上传");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = fileChooser.showOpenDialog(getContentPane());// 显示文件选择对话框
// 判断用户单击的是否为“打开”按钮
if (i == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();// 获得选中的文件对象
textField.setText(selectedFile.getName());// 显示选中文件的名称
}
}
});
panel.add(button);
add(panel, BorderLayout.NORTH);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
t3 test = new t3();
}
}
例:文件选择对话框利用文件过滤器对文件进行了过滤,使文件选择对话框中只列出格式为JPG或GIF格式的图片,并且将选中的图片显示到面板上面。
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.filechooser.FileFilter;
public class t3 extends JFrame{
public t3() {
setTitle("选项卡面板");
setBounds(400, 400, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel label = new JLabel("双击面板任意一处选择照片(JPG/GIF)",SwingConstants.CENTER);//设置标签文字居中显示
label.addMouseListener(new MouseAdapter() {
JFileChooser fileChooser;
{
fileChooser = new JFileChooser();// 创建文件选择对话框
FileFilter filter = new FileNameExtensionFilter("图像文件(JPG/GIF)", "JPG", "JPEG", "GIF");// 设置文件过滤器,只列出JPG或GIF格式的图片
fileChooser.setFileFilter(filter);
}
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int i = fileChooser.showOpenDialog(getContentPane());// 显示文件选择对话框
// 判断用户单击的是否为“打开”按钮
if (i == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();// 获得选中的图片对象
label.setIcon(new ImageIcon(selectedFile.getAbsolutePath()));// 将图片显示到标签上
label.setText(null);
}
}
}
});
add(label);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
t3 test = new t3();
}
}