我尝试选择带有扩展名的文件,例如“ * .jpg”,并带有以下代码。
FileDialog dialog = new FileDialog(owner, "Select Files");
dialog.setMode(FileDialog.LOAD);
dialog.setDirectory(System.getProperty("user.home"));
dialog.setLocationRelativeTo(null);
dialog.setMultipleMode(true);
dialog.setVisible(true);
dialog.setFilenameFilter(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
});
OR
FileDialog dialog = new FileDialog(owner, "Select Files");
dialog.setMode(FileDialog.LOAD);
dialog.setDirectory(System.getProperty("user.home"));
dialog.setLocationRelativeTo(null);
dialog.setMultipleMode(true);
dialog.setVisible(true);
dialog.setFile("*.jpg");
在此代码中,FileDialog通常打印出来,但文件过滤器不适用。 我发现了此代码的错误,但无法修复。 因为,该错误已在FileDialog中发生。
您可以在java.awt.FileDialog中的代码下看到。
public void setFile(String file) {
this.file = (file != null && file.equals("")) ? null : file;
FileDialogPeer peer = (FileDialogPeer)this.peer;
if (peer != null) {
peer.setFile(this.file);
}
}
....
public synchronized void setFilenameFilter(FilenameFilter filter) {
this.filter = filter;
FileDialogPeer peer = (FileDialogPeer)this.peer;
if (peer != null) {
peer.setFilenameFilter(filter);
}
}
当我调试此代码时,peer为null。因此,setFile和setFilternameFilter不起作用。该同位体是组件的字段,我找不到初始化代码。我也在javadoc
中找到了这种方法Toolkit.createFileDialog(FileDialog target)
但是,我不明白如何使用该方法。在我的项目中,我无法使用JFileChooser。在这种情况下如何应用文件过滤器?