java awt FileDialog无法设置文件过滤器

时间:2018-11-30 11:17:58

标签: java swing file awt

我尝试选择带有扩展名的文件,例如“ * .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。在这种情况下如何应用文件过滤器?

0 个答案:

没有答案