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

时间:2016-04-14 12:39:00

标签: java swing jfilechooser

我正在处理这个swing组件JfileChooser。我正在选择多个文件,然后单击确定。 之后,如果我再次打开选择文件,它显示我以前选择的文件,我不想要。 我希望维护以前的目录,但不能保留以前的文件。它给用户带来了非常糟糕的体验。

以下是我编写的代码片段。

    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和所有。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

每次需要时都会创建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);
    }

}