问题描述
我正在尝试将 JFileChooser 设置为仅允许通过 showOpenDialog 选择特定文件类型 (pdf)。
我已经设置了一个文件过滤器,但我对它对 JFileChooser 执行的操作感到困惑。
我想要实现的是:
这是我的代码:
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setAcceptAllFileFilterUsed(false);
fc.setFileFilter(new FileNameExtensionFilter("PDF Files","pdf"));
fc.setDialogTitle("Load MSDS");
int op = fc.showOpenDialog(this);
if(op == JFileChooser.APPROVE_OPTION) {
File f = fc.getSelectedFile();
lbl_msds_loaded.setForeground(Color.BLACK);
lbl_msds_loaded.setText(f.getName() + " (Size: " + utils.FileUtils.getFileSizeMegaBytes(f,3) + ")");
}
我得到了这种行为:
视觉上 - 过滤有效,对话框只显示 PDF 文件,因此我只能从列表中选择 pdf 文件。
但是 - 我仍然可以手动选择无效文件,方法是在“文件名:”字段中输入一些名称,然后单击打开(或按 Enter)。
例如:如果我编写 Untitled.png(它确实存在于当前打开的目录中)并打开,我将加载该 png 文件。
或者如果写一个不存在的文件名并单击打开,我实际上会加载一个具有该名称的新文件。
(加载是指 getSelectedFile() 将返回的文件)。
如果设置了无效文件(当然基于过滤器),是否有办法不允许对话框批准打开操作?
使用带有过滤器的 JFileChooser Dialogs 时不应该是这种情况吗?
过滤器到底在做什么? JFileChooser 的文档没有解释任何这些方面。
我真的很感谢解释它是如何工作的。
另外 setFileFilter 和 addChoosableFileFilter 有什么区别?它们给出了完全相同的行为。
最后,这里有一些我正在处理的 Dialog 和 JFrame 表单的屏幕截图:
https://ibb.co/bFVqVmt
https://ibb.co/5BcsXSW
https://ibb.co/2qq0qr9
https://ibb.co/jMXXXyN
https://ibb.co/g3kvtfd
https://ibb.co/2FshJpt
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)