在启用 jfilechooser 多文件选择器中打开对话框后,文件显示所选文件

Files are showing selected file after opening the dialog box in jfilechooser multi file chooser enabled

我正在处理这个摆动组件 JfileChooser 。我正在 select 处理多个文件,然后单击确定。 之后,如果我再次打开 select 文件,它会向我显示我不想要的前一个 selected 文件。 我希望保留以前的目录,而不是以前的文件。这会带来非常糟糕的用户体验。

这是我写的代码片段。

    JFileChooser fileopen = new JFileChooser();   
        private void fileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileButtonActionPerformed
            fileopen.setMultiSelectionEnabled(true);
            int ret = fileopen.showDialog(null, "Open file");
            if (ret == JFileChooser.APPROVE_OPTION) {
                File[] file = fileopen.getSelectedFiles();
                fileText.setText(file[0].getAbsolutePath());
                for( int i =1;i < file.length;i++)
                {
                    fileText.append("||");       
                    fileText.append(file[i].getAbsolutePath());
                }
            }else {
                log.info("File access cancelled by user.");
        }       

    }//GEN-LAST:event_fileButtonActionPerformed 

我尝试使用那些 setcurrentdirecotory 和所有 .任何帮助将不胜感激。

要么在每次需要时创建一个新的 JFileChooser 实例,要么调用 setSelectedFiles 并传递它 null

已更新

所以,我快速查看了 setSelectedFilesetSelectedFiles 方法,它们应该清除选择和“文件名”字段,但它似乎不起作用对我来说 Mac OS,所以这可能是外观问题。

我喜欢作弊。我将最后一个目录值存储在 Preferences API 中,我这样做是因为它非常简单,而且它还意味着该值在执行过程中持续存在,非常有帮助。如果你不想在执行过程中保留它,你可以使用 MapProperties 或其他一些变量,这取决于你

public class TestPane extends JPanel {

    public TestPane() {
        setLayout(new GridBagLayout());
        JButton btn = new JButton("...");
        add(btn);
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileopen = new JFileChooser();
                String path = Preferences.userNodeForPackage(TestPane.class).get("FileAccess.lastSelectedDirectory", null);
                if (path != null) {
                    File filePath = new File(path);
                    if (filePath.exists() && filePath.isDirectory()) {
                        fileopen.setCurrentDirectory(filePath);
                    }
                }
                fileopen.setMultiSelectionEnabled(true);
                int ret = fileopen.showDialog(null, "Open file");
                if (ret == JFileChooser.APPROVE_OPTION) {
                    File[] file = fileopen.getSelectedFiles();
                    System.out.println("You selected " + file.length + " files");
                    Preferences.userNodeForPackage(TestPane.class).put("FileAccess.lastSelectedDirectory", fileopen.getCurrentDirectory().getAbsolutePath());
                } else {
                    System.out.println("File access cancelled by user.");
                }
            }
        });
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(200, 200);
    }

}