需要FileDialog和Java中的文件类型过滤器

Mor*_*nar 4 java swing filedialog awt

我有一个带有按钮/文本字段的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();
Run Code Online (Sandbox Code Playgroud)

我的问题是,我没有看到所有文件过滤器,而是想提供自定义过滤器,例如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" );
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了吗?此外,我想在框中显示一个描述,如"Microsoft Word(*.doc*.docx)",但我不知道该怎么做.

任何和所有的帮助表示赞赏.

Ada*_*kin 5

如今,AWT并不是编写Java GUI应用程序的首选方式.太阳似乎大多放弃了它.最受欢迎的两个选项是Swing和SWT.所以我认为他们并没有真正开发API以增加现代功能.(错误,回答你的问题:不,你似乎无法用AWT做到这一点)

Swing的优势在于它可以在任何地方进行真正的一次写入操作,并且在任何地方都可以看起来完全相同.有看起来和感觉试图让Swing看起来很原生,有些比其他更好(Mac并不可怕,Windows没问题,GTK不是).尽管如此,如果你想要一个真正看起来和行为完全相同的应用,Swing会让你这样做.此外,它开箱即用,没有任何额外的库.表现不是很好.

Swing的JFileChooser会让你做你想做的事.创建的子类的FileFilter,并呼吁setFileFilterJFileChooser.

SWT将写入一次运行到任何地方都是相反的极端.你仍然有一个你编写的代码库,但它实际上使用每个平台上的本机小部件,所以它通常看起来像一个本机应用程序(在任何地方都不完美,但仍然令人印象深刻).根据我的经验,这是快速和可靠的.Eclipse(以及其他高端软件)使用SWT,因此它的使用非常繁重.但它确实需要特定于平台的JAR和DLL.


dfa*_*dfa 5

既然你正在使用JDialog,那么为什么不使用JFileChooser呢?

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

FileNameExtensionFilter是一个很好的Java 6类,可以完全满足您的需求.

  • 我使用FileDialog的原因是它完全匹配Windows的外观和感觉,并且与我们的应用程序中的其他对话框一致.我可以制作匹配的JFileChooser吗? (3认同)