我有一个带有按钮/文本字段的 JDialog,供用户选择文件。这是代码:

FileDialog chooser = new FileDialog(this, "Save As", FileDialog.SAVE );
String startDir = saveAsField.getText().substring( 0, saveAsField.getText().lastIndexOf('\\') );
chooser.setDirectory(startDir);
chooser.setVisible(true);
String fileName = chooser.getFile();

我的问题是,我不想看到“所有文件”过滤器,而是想提供一个自定义过滤器,例如用于Word文档或其他东西。我使用 setFilenameFilter() 设置了自定义 FilenameFilter,但它似乎不起作用。我确实注意到文档中说自定义过滤器在 Windows 中不起作用(这在 Windows XP/Vista/7 中运行)。这是我的过滤器的实现:

chooser.setFilenameFilter( new geFilter() );
public class geFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return name.endsWith( ".doc" ) || name.endsWith( ".docx" );
    }
}

我在这里做错了什么吗?另外,我希望在框中显示说明,例如“Microsoft Word (*.doc *.docx)”,但我不知道该怎么做。

感谢任何和所有的帮助。

有帮助吗?

解决方案

AWT是不是真的编写Java GUI应用这些天的首选方式。太阳也大多放弃了。两种最流行的选择是Swing和 SWT 。因此,我认为他们并没有真正开发的API非常广泛添加现代功能。 (错了,回答你的问题:不,你似乎没有能够做到与AWT)

秋千的优势在于它是真正的一次编写随处运行,它可以长得一模一样无处不在。还有的外观和感觉,尝试让Swing外观本地的,有些是比别人做得更好键(Mac并不可怕时,Windows是好,GTK不是)。不过,如果你想要一个应用程序,真正的外观和行为EXACTLY到处都一样,摇摆会让你做到这一点。再加上它运行外的开箱,没有任何额外的库。性能不是很大。

Swing的的JFileChooser 会让你做你想做的。创建 的FileFilter的子类并且呼吁setFileFilter JFileChooser

SWT取一次写入随处运行相反的极端。你还有你写对一个代码库,但它实际上使用本机小部件每个平台上,因此它通常看起来像一个本机应用程序(不完美随处可见,但仍令人印象深刻)。它的快速和以我的经验相当可靠。月食(和其他高配置文件软件)使用SWT因此它在相当大量使用。但它确实需要特定于平台的JAR文件和DLL。

其他提示

由于您使用的JDialog,这是一个Swing类,为什么不使用的 JFileChooser中

 JFileChooser fc = new JFileChooser("C:\\");
 fc.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc, *.docx)", "doc", "docx"));

的FileNameExtensionFilter 是一个很好的Java 6分中的类,它正是你想要的。

我也想这样做。我想使用代替的JFileChooser FileDialog的。

我找到了答案在这里: http://www.rgagnon.com/javadetails/ java的0247.html

他说:“这场胜利平台,setFilenameFilter方法不起作用。我们必须利用setFile方法,而不是设置一个过滤器。”

有在指定的链接源代码。

我测试和它的工作原理:

FileDialog fd = new FileDialog((Frame) null, "Save File", FileDialog.SAVE);
fd.setFile("*.txt");
fd.setVisible(true);

String file = fd.getFile();
System.out.println(file);
System.exit(0);

您可以调用本地Windows的FileDialog(CFileDialog的)使用JNI。过滤器可以很容易的CFileDialog设置。

我几个月前写了的CFileDialog一个简单的包装类,如果你有兴趣,你可以从

的源代码和二进制

对谷歌代码 Xfiledialog项目

如果你曾经使用过 JavaFX 2, , 这 文件选择器 类将完全满足您的需要,而不会出现任何 JFileChooser/FileDialog 问题。您还可以在 Swing 应用程序中嵌入 JavaFX 2 组件,但您需要 JavaFX 运行时.

例子:

    FileChooser fc = new FileChooser();
    FileChooser.ExtensionFilter filter;
    filter = new FileChooser.ExtensionFilter("Text files (*.txt)", "*.txt");
    fc.getExtensionFilters().add(filter);
    File f = fc.showOpenDialog(primaryStage);
    System.out.println(f);

只要使用setFilenameFilter实例FileDialogfd方法:

            fd.setFilenameFilter(new FilenameFilter()
                            {
                                @Override
                                public boolean accept(File file, String s)
                                {
                                    // enter code to return TRUE or FALSE here
                                    return s.contains(".txt");
                                }
                            });
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top