4.2、复杂组件
文件和颜色选择器
JFileChooser,文件选取器。JFileChooser为用户选择文件提供了一种简单的机制,包括打开文件和保存文件。
构造方法和常用方法如下:
方法 | 功能 |
JFileChooser(String currentDirectoryPath) | currentDirectoryPath: 打开文件选取器时默认显示的文件夹(默认为用户文件夹) |
JFileChooser(File currentDirectory) | currentDirectory: 打开文件选取器时默认显示的文件夹(默认为用户文件夹) |
void setCurrentDirectory(File dir) | 设置默认显示的文件夹 |
void setFileSelectionMode(int mode) | 设置文件选择模式,FILES_AND_DIRECTORIES: 文件和文件夹都可以选,其他的二选一 |
void setMultiSelectionEnabled(boolean b) | 设置是否允许同时选择多个(默认为不允许) |
void addChoosableFileFilter(FileFilter filter) | 添加可供用户选择的文件过滤器 |
void setFileFilter(FileFilter filter) | 设置默认使用的文件过滤器 |
void setSelectedFile(File file) | 设置默认被选中的文件 |
File[] getSelectedFiles() | 获取选择的文件(一般在用户选择完文件点击了确认或保存后通过该方法获取选中的文件) |
class FileSelectedUse {
public FileSelectedUse() {
JFrame jFrame = new JFrame();
JPanel jPanel = new JPanel();
/**
* 显示 打开文件 或 保存文件 的对话框(线程将被阻塞, 直到选择框被关闭):showOpenDialog(Component parent), showSaveDialog(Component parent)
* 参数:
* parent: 文件选取器对话框的父组件, 对话框将会尽量显示在靠近 parent 的中心; 如果传 null, 则显示在屏幕中心。
* 返回值:
* JFileChooser.CANCEL_OPTION: 点击了取消或关闭
* JFileChooser.APPROVE_OPTION: 点击了确认或保存
* JFileChooser.ERROR_OPTION: 出现错误
*/
final JTextArea jTextArea = new JTextArea(10, 30);
jTextArea.setLineWrap(true);
jPanel.add(jTextArea);
JButton openBtn = new JButton("打开");
openBtn.addActionListener(e -> showFileOpenDialog(jFrame, jTextArea));
jPanel.add(openBtn);
JButton saveBtn = new JButton("保存");
saveBtn.addActionListener(e -> showFileSaveDialog(jFrame, jTextArea));
jPanel.add(saveBtn);
jFrame.setContentPane(jPanel);
// 省略公共代码
}
/**
* 打开文件
* @param parent 组件
* @param msgTextArea 文本域
*/
private static void showFileOpenDialog(Component parent, JTextArea msgTextArea) {
// 创建一个默认的文件选取器
JFileChooser fileChooser = new JFileChooser();
// 设置默认显示的文件夹为当前文件夹
fileChooser.setCurrentDirectory(new File("."));
// 设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选)
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
// 设置是否允许多选
fileChooser.setMultiSelectionEnabled(true);
// 添加可用的文件过滤器(FileNameExtensionFilter 的第一个参数是描述, 后面是需要过滤的文件扩展名 可变参数)
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("zip(*.zip, *.rar)", "zip", "rar"));
// 设置默认使用的文件过滤器
fileChooser.setFileFilter(new FileNameExtensionFilter("image(*.jpg, *.png, *.gif)", "jpg", "png", "gif"));
// 打开文件选择框(线程将被阻塞, 直到选择框被关闭)
int result = fileChooser.showOpenDialog(parent);
if (result == JFileChooser.APPROVE_OPTION) {
// 如果点击了"确定", 则获取选择的文件路径
File file = fileChooser.getSelectedFile();
// 如果允许选择多个文件, 则通过下面方法获取选择的所有文件
msgTextArea.append("打开文件: " + file.getAbsolutePath() + "
");
}
}
/**
* 选择文件保存路径
* @param parent 组件
* @param msgTextArea 文本域
*/
private static void showFileSaveDialog(Component parent, JTextArea msgTextArea) {
// 创建一个默认的文件选取器
JFileChooser fileChooser = new JFileChooser();
// 设置打开文件选择框后默认输入的文件名
fileChooser.setSelectedFile(new File("测试文件.zip"));
// 打开文件选择框(线程将被阻塞, 直到选择框被关闭)
int result = fileChooser.showSaveDialog(parent);
if (result == JFileChooser.APPROVE_OPTION) {
// 如果点击了"保存", 则获取选择的保存路径
File file = fileChooser.getSelectedFile();
msgTextArea.append("保存到文件: " + file.getAbsolutePath() + "
");
}
}
}