在窗口对话框OSX中排除文件

时间:2019-03-31 08:15:45

标签: java macos file select processing

我尝试从窗口对话框中排除类型文件。 what i need in my window

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设计对应关系。但是我找不到任何代码来设置打开窗口时排除类型文件的可能性。我发现唯一的事情是使用下面的代码在选择文件夹后排除了文件;但是我觉得这个解决方案不是很好! 我的目的是可以直接在窗口中查看文件是否经过授权。

1 个答案:

答案 0 :(得分:1)

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

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参考实现中不起作用。