(提前致谢!如果您需要更多信息,请告诉我。示例代码在底部。)
我要解决的问题:
我试图通过使用 javax.swing.filechooser.FileFilter 对象让这个 JFileChooser 对象只显示目录(而不是文件),该对象在 accept(File file) 覆盖方法中有这个:返回文件.isDirectory();
。但是,至少在我的 Mac 上,它似乎并没有阻止文件与目录一起显示(它确实阻止了在不使用 setFileSelectionMode() 方法的情况下选择文件)。
问题
我错过了什么吗?如果没有,有没有人遇到过这个?
我的理解/假设:
- 当您将 javax.swing.filechooser.FileFilter 对象传递给 JFileChooser 的
setFileFilter()
方法时,奇迹就会发生。 - 似乎我的带有 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 下它的外观截图
关于带有过滤器的 Java JFileChooser 应该仅显示目录无法仅显示目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055910/