【问题标题】:How to set filter for file type in FileDialog如何在 FileDialog 中为文件类型设置过滤器
【发布时间】:2026-02-03 09:10:02
【问题描述】:

我需要在文件对话框中添加 JPG 和 PNG 文件的类型以添加​​到文件类型中为了让用户只看到这两种类型的文件,这是我在 GUI 表单中单击按钮后的代码。

jLabel2.setText("");
Frame frame = null;
FileDialog fd = new FileDialog(frame, "Select Cover Photo");
fd.setAlwaysOnTop(true);
fd.setVisible(true);
if (fd.getFile() != null) {
    String path = new File(fd.getDirectory(), fd.getFile()).getAbsolutePath();
    if (new File(path).length() / 1024 > 1536) {
        JOptionPane.showMessageDialog(null, "picture size can't mor than 1.5 MG");
    } 
    else {
        System.out.println(path);
        jLabel2.setText(path);
        fd.dispose();
        System.out.println("size= " + new File(path).length() / 1024 + " KB");
    }
} else {
    System.out.println("No Data");
    fd.dispose();
}

我在选择之前使用这种方法查看照片。请注意照片。

【问题讨论】:

  • 使用 JFileCooserthis answer 所示。请注意,基于 AWT 的 FileDialog: 1) 受到更多限制,因为它只能提供可以在所有平台上保证的功能。 2) 在 Unix / Linux 和 Mac OS 上看起来会有所不同。您将无法在这些平台上提供“Windows 外观”文件对话框,无论如何用户都希望看到不同的外观。
  • 在 JFileCooser 用户在选择之前看不到图像
  • 在浪费更多时间之前,请务必阅读我对评论的编辑。

标签: java swing filedialog


【解决方案1】:

基本上你需要做的就是给你的FileDialog添加一个过滤器,你可以这样做:

fd.setFilenameFilter( (dir, name) -> name.endsWith(".jpeg") || name.endsWith(".png") );

但我会推荐使用JFileChooser,它有更多的功能。 例如,您可以通过这种方式添加多个文件过滤器:

        FileChooser fileChooser = new FileChooser();
        fileChooser.setInitialFileName("Your File");

        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("Image 1", "*.jpg"),
                new FileChooser.ExtensionFilter("Image 2", "*.png"),
        );
  1. 链接到基于 AWT 的 API 文档 FileDialog
  2. 链接到基于 Swing 的 JFileChooser 的 API 文档,
  3. 链接到基于 Java-FX 的 FileChooser 的 API 文档。

将 Java-FX 组件集成到基于 Swing 的应用程序中需要特殊处理,因为每个组件都使用不同的线程。所以这也必须考虑在内。

【讨论】:

  • @AndrewThompson 我必须通过添加参考来改进我的答案,谢谢。