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

时间:2012-04-07 15:54:17

标签: java swing jfilechooser filefilter

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

我正试图解决的问题:

我试图让这个JFileChooser对象只显示目录(而不是文件),通过使用javax.swing.filechooser.FileFilter对象在accept(文件文件)覆盖方法中有这个:{{ 1}}。但是,至少在我的Mac上,它似乎不会阻止文件与目录一起显示(它确实阻止了文件的选择而不使用setFileSelectionMode()方法)。

问题

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

我的理解/假设:

  1. 当您将javax.swing.filechooser.FileFilter对象传入JFileChooser的return file.isDirectory();方法时,应该会发生魔术。
  2. 好像我的JFileChooser与setFileFilter()的行为类似于setFileFilter()的使用
  3. 代码

    setSelectionMode( JFileChooser.DIRECTORIES_ONLY );

    谢谢!

    亚历

1 个答案:

答案 0 :(得分: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";
      }
    }
}

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

修改

使用JDK1.7在OS X下的外观截图

OS X screenshot