7

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

我试图解决的问题:

我试图让这个 JFileChooser 对象只显示目录(而不是文件),通过使用 javax.swing.filechooser.FileFilter 对象,该对象在 accept(File file) 覆盖方法中有这个:return 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";
  }
}

谢谢!

亚历克斯

4

1 回答 1

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 屏幕截图

于 2012-04-07T16:01:24.583 回答