繁体   English   中英

如何在 JFileChooser 保存对话框中处理问号或星号(“?”或“*”)?

[英]How do I handle question marks or asterisks ('?' or '*') in JFileChooser save dialog?

首先我创建一个JFileChooser然后调用showSaveDialog 如果用户输入问号? 或星号*File Name输入字段中的任何位置,然后我会得到一些非常奇怪的行为。 即,用户在File Name段中输入的文本被复制到Files of Type字段中。

最小的可重现示例(没有导入):

public class ChooserTest {
    static String path;

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JButton saveAsButton = new JButton("Save As");
        saveAsButton.addActionListener(e -> saveAs());
        frame.add(saveAsButton);
        frame.pack();
        frame.setVisible(true);
    }

    private static void saveAs() {
        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        int returnState = jfc.showSaveDialog(null);
        if(returnState == JFileChooser.APPROVE_OPTION) {
            path = jfc.getSelectedFile().getAbsolutePath();
            try {
                File f = new File(path);
                FileWriter out = new FileWriter(f);
                out.write("hello world");
                out.close();
            } catch (Exception e){
                e.printStackTrace();
            }
        } else {
            return;
        }
    }
}

我已经在两台不同的 Windows 机器上的 Java 15 和 16 中复制了这种行为。 在我的代码中,我确实在path = jfc.getSelectedFile().getAbsolutePath();之前验证了用户提供的文本。 ,但是无论我告诉系统做什么,都会发生这种行为,因此它必须在 JFileChooser 返回选项之前发生。

这是发生的情况的屏幕截图:

这是发生的情况的屏幕截图。 如果用户输入了file_name??.txt ,那么这就是Files of Type字段中显示的内容。 它再现了用户输入的文本。

最后,我确实找到了 2015 年另一位 SO 用户的两个相关帖子,但这似乎更复杂,我不想破坏他们的问题。

这如果 FileChooser 对文件列表进行动态过滤。

如果用户输入“?” 然后它将使用单个字符过滤所有文件名。

如果用户输入如下内容:“table*”,它将过滤所有以“table”开头的文件。

如果用户输入如下内容:“table?” 它将过滤以“table”开头的所有文件以及任何其他字符。

BasicFileChooserUI class 中,当出现“*”或“?”时,FileFilter 会不断使用GlobFilter重置。 在文件名中找到字符。

我不知道如何禁用此功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM