swing中JFileChooser的用法
1、基本用法
JFileChooser dlg = new JFileChooser(); dlg.setDialogTitle("Open JPEG file"); int result = dlg.showOpenDialog(this); // 打开"打开文件"对话框 // int result = dlg.showSaveDialog(this); // 打"开保存文件"对话框 if (result == JFileChooser.APPROVE_OPTION) { File file = dlg.getSelectedFile(); ... }
2、自定义FileFilter
JDK没有提供默认的文件过滤器,但提供了过滤器的抽象超类,我们可以继承它。
i
mport javax.swing.filechooser.FileFilter; public final class PictureFileFilter extends FileFilter { private String extension; private String description; public PictureFileFilter(String extension, String description) { super(); this.extension = extension; this.description = description; } public boolean accept(File f) { if (f != null) { if (f.isDirectory()) { return true; } String extension = getExtension(f); if (extension != null && extension.equalsIgnoreCase(this.extension)) { return true; } } return false; } public String getDescription() { return description; } private String getExtension(File f) { if (f != null) { String filename = f.getName(); int i = filename.lastIndexOf('.'); if (i > 0 && i < filename.length() - 1) { return filename.substring(i + 1).toLowerCase(); } } return null; } }
其实主要就是accept(File f)函数。上例中只有一个过滤器,多个过滤器可参考JDK目录中“demo\jfc\FileChooserDemo\src”中的“ExampleFileFilter.java”
3、多选
在基本用法中,设置
c.setMultiSelectionEnabled(true);
即可实现文件的多选。
读取选择的文件时需使用
File[] files = c.getSelectedFiles();
4、选择目录
利用这个打开对话框,不仅可以选择文件,还可以选择目录。
其实,对话框有一个FileSelectionMode属性,其默认值为“JFileChooser.FILES_ONLY”,只需要将其修改为“JFileChooser.DIRECTORIES_ONLY”即可。
JFileChooser c = new JFileChooser(); c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); c.setDialogTitle("Select path to save"); int result = c.showOpenDialog(PrintDatetime.this); if (result == JFileChooser.APPROVE_OPTION) { String path = c.getSelectedFile().getAbsolutePath()); ... }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了