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

2023-12-27

我有一个带有按钮/文本字段的 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 应用程序的首选方式。 Sun似乎已经基本上放弃了它。两个最受欢迎的选项是 Swing 和SWT http://www.eclipse.org/swt/。所以我认为他们并没有真正广泛地开发 API 来添加现代功能。 (呃,回答你的问题:不,你似乎无法使用 AWT 做到这一点)

Swing 的优点是它真正做到一次编写、到处运行,并且在任何地方看起来都完全相同。有些外观和感觉试图使 Swing 看起来像原生的,有些比其他更好(Mac 还不错,Windows 还可以,GTK 则不然)。不过,如果您想要一个在任何地方看起来和行为都完全相同的应用程序,Swing 可以让您做到这一点。另外,它开箱即用,无需任何额外的库。性能不太好。

Swing's 文件选择器 http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFileChooser.html会让你做你想做的事。创建一个子类文件过滤器 http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/filechooser/FileFilter.html并打电话setFileFilter on the JFileChooser.

SWT 将“一次写入,随处运行”推向了相反的极端。您仍然有一个可编写的代码库,但它实际上使用每个平台上的本机小部件,因此它通常看起来像一个本机应用程序(并非在所有地方都很完美,但仍然令人印象深刻)。根据我的经验,它很快而且相当可靠。 Eclipse(和其他知名软件)使用 SWT,因此它的使用量相当大。但它确实需要特定于平台的 JAR 和 DLL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要 Java 中带有文件类型过滤器的 FileDialog 的相关文章

随机推荐

  • 如何访问 Model ZF2 中的 getServiceLocator

    我正在尝试访问模型中的 getServiceLocator 函数 它在控制器中工作 但是当我将它移动到模型中时 我在尝试访问时得到 NULL Call to a member function get on null 下面的链接似乎提供了一
  • C++ 和 Python:从 python 向 c++ 传递并返回 2D 双指针数组

    我想将一个 2D 数组从 Python 传递到 C 函数 然后将一个相同类型 相同维度的数组返回给 Python 我知道这个问题已经被问过好几次了 但我一直无法找到与我的问题相关的答案 对于我的问题 我必须使用双指针数组并让函数返回双指针数
  • Java 本地化文件名

    我如何在java中设置本地化文件名 目前 每次我单击应用程序中具有非ascii文件名的本地化文件时 都会弹出Windows保存对话框 但如果字符集高于ISO 则它不会正确显示文件名88859 1 这是我保存文件的代码 InputStream
  • Web Api ModelState 验证忽略 DisplayAttribute

    给定一个具有这些数据注释的模型 public class Example Required Display Name Activity response public string ActivityResponse get set 我希望模
  • 如何使用 JavaScript (lodash) 深度映射对象键?

    https lodash com docs mapKeys https lodash com docs mapKeys 是否可以使用 Lodash 深度映射对象的键 如果没有 是否有另一个库提供此功能 如果与其他深度迭代和操作功能组合在一起
  • 将 docker 镜像部署到云运行时如何解决“容器无法启动错误”

    问题陈述 我创建了一个 docker 应用程序 一个简单的 python 代码 并尝试使用 Google Cloudrun 进行部署和自动运行 但每次在部署过程中我都会看到以下错误 command gcloud run deploy my
  • Sonata 管理员:验证后发送电子邮件

    我正在使用 symfony2 sonata admin bundle 和 mongodb 我刚刚制作了一个添加用户的界面 当用户在 sonataadmin 的 Web 界面上按 创建 时 如何发送电子邮件 我必须覆盖 Sonata Admi
  • Ruby gsub:有更好的方法吗

    我需要删除所有前导和尾随非数字字符 这就是我想出来的 有没有更好的实现 puts s gsub D gsub D 选择您想要的内容 使用括号 通常会更清楚 而不是消除您不想要的内容 此外 这只需要一次正则表达式评估 s match D D
  • 在 Eclipse 中,当 Assert.assertEquals 失败时,如何查看它的输入?

    我不是 Eclipse 专家 所以请原谅我的笨拙 在 Eclipse 中 当我调用 Assert assertEquals obj1 obj2 但失败时 如何让 IDE 显示 obj1 和 obj2 我在用着JExample http sc
  • CreateWindow失败,错误50(不支持该请求。)

    我在这里做错了什么 但错误消息没有给我任何线索 对 CreateWindow 的调用总是失败 返回 NULL 并且 GetLastError 返回 50 我想要的只是一个简单的空白窗口 但显然我的请求 不支持 gcc basic c o b
  • 如何将 Unicode 标题传递给 matplotlib?

    无法在 matplotlib 中获得正确的标题 technologie n in C gives technologie n in C 已经尝试过的可能解决方案 u technologie n in C 不起作用 也不 coding utf
  • 为什么 NSWindow 动画器 setFrame:display:animate: 有时不起作用?

    我是可可的新手 我正在努力扩展项目的功能 该项目的原始功能是打开一个文件并在nsbox中显示文件图标 在nswindow中 当我单击菜单打开时 它工作正常 但是当我以编程方式打开文件 使用菜单调用的相同 openfile 函数 时 它不显示
  • mod_rewrite VS 相对路径

    我的 mod rewrite 代码是 Options FollowSymLinks Options Indexes RewriteEngine On RewriteCond REQUEST FILENAME d RewriteCond RE
  • 使用 Visual Studio 2017 的 Azure 数据工厂项目

    我不确定 Visual Studio 2017 目前是否支持 Azure 数据工厂项目 我刚刚安装了 VS 2017 但无法打开我们的解决方案 因为有一个 azure 数据工厂项目 Azure 数据工厂是否支持 Visual Studio
  • 表达式树 - 如何声明实例?

    我是表达式树的新手 所以我不确定如何问这个问题或使用什么术语 这是我想要做的事情的一个过于简化的版本 Bar bar new Bar Zap gt bar Foo public static void Zap
  • F# 类型提供程序相关的嵌套类型

    我正在尝试构建一个嵌套的 TypeProviderProvidedProperty根据父级的类型值生成 我想要的结果如下 r bin Debug library dll open Library TypeProviders type sdm
  • 如何验证整数值以避免 SQL 注入?

    对于定义的值类型 例如数字 避免 SQL 注入的最佳方法是验证值 因为与 mysqli 准备相比 这样做更容易 在 PHP 中 我们可以通过以下方式做到这一点 1 if is numeric value value 0 2 value fl
  • 生产代码中的 Mongoose 索引

    根据猫鼬文档 http mongoosejs com docs guide html for MongooseJS and MongoDB Node js 当您的应用程序启动时 Mongoose 会自动调用ensureIndex对于架构中每
  • 如何真正使 GTK+ 3 GtkLayout 透明/绘制主题背景?

    如果我创建一个内部没有任何内容的普通 GtkWindow 或一个内部有 GtkDrawingArea 的 GtkWindow 或 GtkScrolledWindow 内部的 GtkWindow 我会得到一个带有主题背景的窗口 如下所示这张照
  • 需要 Java 中带有文件类型过滤器的 FileDialog

    我有一个带有按钮 文本字段的 JDialog 供用户选择文件 这是代码 FileDialog chooser new FileDialog this Save As FileDialog SAVE String startDir saveA