java awt FileDialog не может установить фильтр файлов - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь выбрать файл с некоторым расширением, например, "* .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");
        }
    });

ИЛИ

    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 равен нулю.из-за этого setFile и setFilternameFilter не работают.Этот узел является полем компонента, и я не могу найти код инициализации.Также я нахожу этот метод в javadoc

Toolkit.createFileDialog(FileDialog target)

Но я не могу понять, как использовать этот метод.В моем проекте я не могу использовать JFileChooser.Как я могу применить фильтр файлов в этой ситуации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...