带有Filter的Java JFileChooser假定只显示目录,无法显示目录

Ale*_* Ku 7 java swing jfilechooser filefilter

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

我正试图解决的问题:

我试图让这个JFileChooser对象只显示目录(而不是文件),通过使用在accept(文件文件)重写方法中具有此功能的javax.swing.filechooser.FileFilter对象:return file.isDirectory();.但是,至少在我的Mac上,它似乎并不会阻止文件与目录一起显示(它确实可以防止在不使用setFileSelectionMode()方法的情况下选择文件).

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

我的理解/假设:

  1. 将javax.swing.filechooser.FileFilter对象传入JFileChooser setFileFilter()方法时,会发生魔法.
  2. 看起来像我的JFileChooser与setFileFilter()表现得像它的使用 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";
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

亚历克斯

Hov*_*els 15

你的代码适合我.我的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";
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,最好是创建自己的SSCCE来演示您的问题.

编辑

屏幕截图,了解它在OS X下的JDK1.7

OS X截图

  • 这段代码向我展示了一个JFileChooser,其中所有文件都是灰色的并且不可选,但SSCCE仍然可见(OS X,JDK 1.7)+1,这使得测试变得非常简单 (2认同)
  • @HovercraftFullOfEels我在帖子中添加了截图,以便其他人可以清楚地看到`JFileChooser`在OS X下表现不同 (2认同)
  • @trashgod - 啊.所以这是一个mac dealio.谢谢!(复制您的评论以供将来参考)来自http://stackoverflow.com/questions/2883447/jfilechooser-select-directory-but-show-files/2883595#2883595"@mmyers:根据经验,它与平台有关,带有文件在Mac OS X上所有支持的L&F中显得灰暗.-- trashgod 2010年5月21日17:02" (2认同)