有可能不在JFileChooser的文件类型组合框中添加键入的通配符?

时间:2012-09-12 16:19:14

标签: java swing jfilechooser

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

JFileChooser中:当用户在文件名字段中输入通配符时,文件类型组合框也会更新。 请参见屏幕截图here

但是,如果您使用notepad.exe尝试此操作,您会发现文件名字段保持原样,因此搜索模式不会更新。 请参阅记事本的屏幕截图here

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

我需要一个跨平台的解决方案,因此它应该适用于XP和Linux。

提前致谢!

对不起链接,但我不允许直接附上!

2 个答案:

答案 0 :(得分:1)

glob pattern识别功能在FileChooserUI代表中为每个Look&感觉。例如,MetalFileChooserUI包含一个继承自ApproveSelectionAction的嵌套BasicFileChooserUI,它会调用setFileFilter()。这会通过PropertyChangeEvent将新模式添加到收听MetalFileChooserUI.FilterComboBoxModel。您可能能够在链的某处拦截添加的过滤器。

您也可以利用Java 7中引入的file pattern matching功能并讨论here

答案 1 :(得分:1)

最后我找到了一个解决方案: 使用从BasicFileChooserUI派生的自定义文件选择器UI将通过以下方式解决我的问题:我已使用自定义操作覆盖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.
        }
    }
}

如果文件名是正确的,那么我允许超级实现做什么,否则我将显示一条消息。