我需要一个JFileChooser,它在保存模式下的行为类似于notepad.exe
或mspaint.exe
。您可能知道在文件名字段中键入通配符(*或?)时,文件视图将仅显示与用户输入匹配的文件。这没关系,但问题出在文件类型组合框:
在JFileChooser
中:当用户在文件名字段中输入通配符时,文件类型组合框也会更新。
请参见屏幕截图here!
但是,如果您使用notepad.exe
尝试此操作,您会发现文件名字段保持原样,因此搜索模式不会更新。
请参阅记事本的屏幕截图here!
所以我的问题是:是否有人知道如何实现文件类型组合框不应该由输入的过滤器更新?
我需要一个跨平台的解决方案,因此它应该适用于XP和Linux。
提前致谢!
对不起链接,但我不允许直接附上!
答案 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.
}
}
}
如果文件名是正确的,那么我允许超级实现做什么,否则我将显示一条消息。