1

notepad.exe我需要一个类似或mspaint.exe处于保存模式的 JFileChooser 。您可能知道,当您在文件名字段中键入通配符(* 或?)时,文件视图将仅显示与用户输入匹配的那些文件。这没关系,但我的问题是文件类型组合框:

In JFileChooser:当用户在文件名字段中输入通配符时,文件类型组合框也会更新。看这里的截图!

但是,如果您尝试这样做,notepad.exe您会发现文件名字段保持原样,因此搜索模式没有更新。在此处查看记事本的屏幕截图!

所以我的问题是:有没有人知道如何实现文件类型组合框不应该被输入的过滤器更新?

我需要一个跨平台的解决方案,所以它应该可以在 XP 和 Linux 上运行。

提前致谢!

对不起链接,但我不能直接附加它!

4

2 回答 2

1

最后我找到了一个解决方案:使用派生自的自定义文件选择器 UIBasicFileChooserUI将通过以下方式解决我的问题:我已经getApproveSelectionAction()用我的自定义操作覆盖了该方法:

protected class CustomApproveSelectionAction extends BasicFileChooserUI.ApproveSelectionAction {

    @Override
    public void actionPerformed(ActionEvent e) {
        String filename = getFileName();
        // using a custom pattern to accept valid charachters only:
        Matcher matcher = pattern.matcher(filename);

        if (matcher.matches()) { 
            // this is the good case, just let the super implementation do what have to do.
            super.actionPerformed(e);
        } else {
            // this is the bad case, we must warn the user and don't let the super implementation take effect.
            // display an error message similar like notepad does it.
        }
    }
}

如果文件名没问题,那么我允许超级实现执行的操作,否则我将显示一条消息。

于 2015-02-27T08:18:43.873 回答
1

全局模式识别功能在每个外观的委托FileChooserUI中实现。例如,MetalFileChooserUI包含一个嵌套的ApproveSelectionAction、继承自BasicFileChooserUI的、调用setFileFilter(). 这通过 a 将新模式添加PropertyChangeEvent到侦听MetalFileChooserUI.FilterComboBoxModel中。您可能能够在链的某处拦截添加的过滤器。

您还可以利用Java 7 中引入并在此处讨论的文件模式匹配功能。

于 2012-09-13T00:14:24.350 回答