【问题标题】:Java JFileChooser with Filter to supposedly display ONLY directories fail to show just directories带有过滤器的 Java JFileChooser 据说只显示目录无法只显示目录
【发布时间】:2012-04-07 15:54:17
【问题描述】:

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

我要解决的问题:

我试图让这个 JFileChooser 对象只显示目录(而不是文件),通过使用 javax.swing.filechooser.FileFilter 对象,该对象在接受(文件文件)覆盖方法中有这个:@987654322 @。但是,至少在我的 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";
  }
}

谢谢!

亚历克斯

【问题讨论】:

  • 请学习常见的Java naming conventions(特别是用于名称的大小写)用于类、方法和属性名称并始终如一地使用它。
  • 感谢您的建议。除了使用“_”(在我的情况下实际上是表示实例变量)之外,您是否介意指出一些事情,而我现在正在浏览网络上有关约定的文档?

标签: java swing jfilechooser filefilter


【解决方案1】:

您的代码对我有用。我的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 下的屏幕截图

【讨论】:

  • 这段代码向我展示了一个 JFileChooser,其中所有文件都显示为灰色且不可选择,但对于 SSCCE 仍然可见(OS X、JDK 1.7)+1,使得测试变得非常简单
  • @Robin:感谢您的提醒。在 Windows 7 上,我根本看不到文件,只有目录。我想知道这是否取决于 L&F。
  • 感谢充满鳗鱼和罗宾的气垫船。是的,使用您的示例,我仍然可以在我的 Mac 上看到这些文件。在 SSCCE 示例上 +1,我肯定会在我未来的 SO 问题中这样做。 (我希望我可以在这里发布一张图片,但事实证明我需要 10 点或更多声望点才能在 SO 上做到这一点。哎呀。)
  • @HovercraftFullOfEels 我在您的帖子中添加了一个屏幕截图,以便其他人可以清楚地看到JFileChooser 在 OS X 下的行为不同
  • @trashgod - 啊。所以这是一个mac dealio。谢谢! (在此处复制您的评论以供将来参考)来自stackoverflow.com/questions/2883447/…“@mmyers:根据经验,它依赖于平台,文件在 Mac OS X 上的所有支持的 L&F 中显示为灰色。- 2010 年 5 月 21 日 17:02"跨度>
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多