JFileChooser 文件过滤实际上并没有过滤至少我打算这样做

问题描述

我正在尝试将 JFileChooser 设置为仅允许通过 showOpenDialog 选择特定文件类型 (pdf)。
我已经设置了一个文件过滤器,但我对它对 JFileChooser 执行的操作感到困惑。

我想要实现的是:

  1. 在视觉上排除其他文件类型,以防止用户从列表中选择它们。
  2. 实际上可以防止选择其他类型或无效文件。 (即让 getSelectedFile() 实际返回一个有效的 pdf 文件

这是我的代码

    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 (将#修改为@)