带有过滤器的 Java JFileChooser 应该仅显示目录无法仅显示目录

标签 java swing jfilechooser filefilter

(提前致谢!如果您需要更多信息,请告诉我。示例代码在底部。)

我要解决的问题:

我试图通过使用 javax.swing.filechooser.FileFilter 对象让这个 JFileChooser 对象只显示目录(而不是文件),该对象在 accept(File file) 覆盖方法中有这个:返回文件.isDirectory();。但是,至少在我的 Mac 上,它似乎并没有阻止文件与目录一起显示(它确实阻止了在不使用 setFileSelectionMode() 方法的情况下选择文件)。

问题

我错过了什么吗?如果没有,有没有人遇到过这个?

我的理解/假设:

  1. 当您将 javax.swing.filechooser.FileFilter 对象传递给 JFileChooser 的 setFileFilter() 方法时,奇迹就会发生。
  2. 似乎我的带有 setFileFilter() 的 JFileChooser 表现得像它使用 setSelectionMode( JFileChooser.DIRECTORIES_ONLY );

代码

import java.io.File;
import javax.swing.filechooser.FileFilter;

// inside a method that's adding this to a JPanel

_fileChooser = new JFileChooser( "." );
_fileChooser.setControlButtonsAreShown( false );
_fileChooser.setFileFilter( new FolderFilter() );
// _fileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
_panelMidLeft.add( _fileChooser );

// an inner class, defined somewhere else in the class

private class FolderFilter extends javax.swing.filechooser.FileFilter {
  @Override
  public boolean accept( File file ) {
    return file.isDirectory();
  }

  @Override
  public String getDescription() {
    return "We only take directories";
  }
}

谢谢!

亚历克斯

最佳答案

您的代码对我有用。我的SSCCE :

import java.io.File;
import javax.swing.JFileChooser;

public class ShowDirectoriesOnly {
   public static void main(String[] args) {
      JFileChooser fileChooser = new JFileChooser( "." );
      fileChooser.setControlButtonsAreShown( false );
      fileChooser.setFileFilter( new FolderFilter() );
      fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
      fileChooser.showOpenDialog(null);
   }

   private static class FolderFilter extends javax.swing.filechooser.FileFilter {
      @Override
      public boolean accept( File file ) {
        return file.isDirectory();
      }

      @Override
      public String getDescription() {
        return "We only take directories";
      }
    }
}

如果您仍然遇到问题,最好是创建自己的 SSCCE这证明了你的问题。

编辑

在带有 JDK1.7 的 OS X 下它的外观截图

OS X screenshot

关于带有过滤器的 Java JFileChooser 应该仅显示目录无法仅显示目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055910/

相关文章:

java - Selenium 网络驱动程序 : finding checkbox based on multiple row values

java - 使用 MongoDB Java 3.0 驱动程序批量更新

java - 在 Android 应用程序上显示印地语字符

java - 让标签图标出现在文本上方

java - 取消文件打开对话框后出现 InterruptedException - 1.6.0_26

java - 如何将 List<Mono<String>> 组合成一个大字符串?

Swing 应用程序始终以最大化方式启动

java - 打印标签 Java、循环(?)

java - 使用 JFileChooser 保存对话框保存文件

java - 使用 Jfilechooser,获取一些时髦的文件名