首页 > 解决方案 > 在窗口对话框中排除文件 OSX

问题描述

我尝试从窗口对话框中排除类型文件。 我的窗户里需要什么

void setup() {
  selectFolder("Select a folder to process:", "folderSelected");
}

void folderSelected(File selection) {
  if (selection == null) {
    println("Window was closed or the user hit cancel.");
  } else {
    println("User selected " + selection.getAbsolutePath());
    printArray(getFolderContent(selection));
  }
}

import java.io.FilenameFilter;
static final String[] exts = { ".gif", ".png", ".jpeg", ".jpg", ".tiff", ".tif"};

static final FilenameFilter pictsFilter = new FilenameFilter() {
  boolean accept(File dir, String name) {
    name = name.toLowerCase();
    for (int i = exts.length; i-- != 0;) {
        if (name.endsWith(exts[i]))  {
            return true;
        }
      }
    return false;
  }
};

static final File[] getFolderContent(File dir) {
  return dir.listFiles(pictsFilter);
}

我不想用JChooser,因为它又丑又旧UI。我尝试使用,FileDialog因为用于显示文件的窗口具有 OSX 设计对应关系。但是我没有找到任何代码来设置在窗口打开时排除类型文件的可能性。我发现它的唯一一件事是使用下面的代码在选择文件夹后排除文件;但我觉得这个解决方案不是很好!我的目的是可以直接在窗口中看到文件是否被授权。

标签: javamacosfileselectprocessing

解决方案


要使用文件名过滤器,您需要创建它并在文件对话框中设置它。

final String[] exts = { ".gif", ".png", ".jpeg", ".jpg", ".tiff", ".tif"};
FileDialog dialog = new FileDialog(frame, "select file", FileDialog.LOAD);
dialog.setFilenameFilter(new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        name = name.toLowerCase();
        for (int i = 0; i <  exts.length; i++) {
            if (name.endsWith(exts[i]))  {
                return true;
            }
          }
        return false;
    }}
);

请注意,根据 javadoc:

文件名过滤器在 Sun 的 Microsoft Windows 参考实现中不起作用。


推荐阅读