Java 可以不在JFileChooser';s文件类型组合框?
我需要一个JFileChooser,它在保存模式下的行为类似于Java 可以不在JFileChooser';s文件类型组合框?,java,swing,jfilechooser,Java,Swing,Jfilechooser,我需要一个JFileChooser,它在保存模式下的行为类似于notepad.exe或mspaint.exe。您可能知道,在文件名字段中键入通配符(*或?)时,文件视图将仅显示与用户输入匹配的文件。这没问题,但我的问题是combobox类型的文件: 在JFileChooser中:当用户在文件名字段中输入通配符时,类型组合框的文件也会更新。 看截图 但是,如果您尝试使用notepad.exe执行此操作,您会发现文件名字段与以前一样,因此搜索模式不会更新。 查看记事本的屏幕截图 因此,我的问题是:有
notepad.exe
或mspaint.exe
。您可能知道,在文件名字段中键入通配符(*或?)时,文件视图将仅显示与用户输入匹配的文件。这没问题,但我的问题是combobox类型的文件:
在JFileChooser
中:当用户在文件名字段中输入通配符时,类型组合框的文件也会更新。
看截图
但是,如果您尝试使用notepad.exe
执行此操作,您会发现文件名字段与以前一样,因此搜索模式不会更新。
查看记事本的屏幕截图
因此,我的问题是:有人知道如何实现组合框类型的文件不应由输入的过滤器更新的解决方案吗?
我需要一个跨平台的解决方案,所以它应该可以在XP和Linux上运行
提前谢谢
抱歉的链接,但我不允许直接附加它 识别功能在每个外观的文件选择器ui
委托中实现。例如,包含一个嵌套的ApproveSelection
,该操作继承自BasicFileChooserUI
,调用setFileFilter()
。这将通过PropertyChangeEvent
向侦听器添加新模式。您可以在链的某个位置拦截添加的过滤器
您还可以利用Java 7中引入并讨论过的功能。最后,我找到了一个解决方案: 使用从
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.
}
}
}
如果文件名是确定的,那么我允许超级实现做什么,否则我将显示一条消息 这一相关信息可用于检查上述事件的顺序。