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

Java 在启用jfilechooser多文件选择器中打开对话框后,文件将显示选定的文件,java,swing,jfilechooser,Java,Swing,Jfilechooser,我正在处理这个swing组件JfileChooser。我正在选择多个文件,然后单击“确定”。 之后,如果我再次打开选择文件,它将显示我不想要的先前选择的文件。 我希望维护以前的目录,但不希望维护以前的文件。这会给用户带来非常糟糕的体验 下面是我所写的代码片段 JFileChooser fileopen = new JFileChooser(); private void fileButtonActionPerformed(java.awt.event.ActionE

我正在处理这个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 
JFileChooser fileopen=newjfilechooser();
私有void fileButtonActionPerformed(java.awt.event.ActionEvent evt){//GEN-FIRST:event\u fileButtonActionPerformed
fileopen.setMultiSelectionEnabled(true);
int-ret=fileopen.showDialog(null,“打开文件”);
if(ret==JFileChooser.APPROVE\u选项){
File[]File=fileopen.getSelectedFiles();
fileText.setText(文件[0].getAbsolutePath());
for(int i=1;i

我试过了这些东西。任何帮助都将不胜感激。

请在每次需要时创建
JFileChooser
的新实例,或者调用并传递它
null

更新 因此,我快速查看了
setSelectedFile
setSelectedFiles
方法,它们应该清除选择和“file name”字段,但在Mac OS上它似乎对我不起作用,因此这可能是一个外观问题

我倾向于做的是欺骗。我将最后一个目录值存储在
Preferences
API中,我这样做是因为它非常简单,而且还意味着该值在执行过程中保持不变,非常有用。如果您不想在执行过程中保持它,可以使用
Map
Properties
或其他变量,这取决于您自己

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);
    }

}

你能给我看看你用setcurrentdirectory试过的代码吗?File currentDirectory=fileopen.getCurrentDirectory();fileopen.setSelectedFile(新文件(“”);fileopen.setCurrentDirectory(currentDirectory);若要更快获得更好的帮助,请发布或。若要获得更好的帮助,请尝试此文件open.setCurrentDirectory(新文件(“D:\\somefolder”);这不会解决问题,因为我需要以前选择的文件夹。但我的问题是我在突出显示模式下获取以前选择的文件。每次打开(或保存)文件时,当我打开文件选择器发现我需要从某个“默认目录”导航到另一个驱动器上的子目录结构(通常)的深处时,我真的很恼火!为了用户的爱,请在“创建新选择器”上使用
setSelectedFiles
选项<代码>
nope setSelectedfiles不工作我尝试了fileopen.setSelectedFile(null)@AndrewThompson同意,我通常将最后一个目录植入类似于
首选项的内容中,并在打开diaog@PraveshBansal
setSelectedFiles
应该可以工作,
setSelectedFile
由于某种原因没有为我重置“文件名”字段。不管怎样,每次需要时,我都会创建一个新的
JFileChooser
实例,并将最后一个目录值存储在某个地方。是的,上面的代码片段工作得非常好。非常感谢你的程序员。有一个问题仍然存在。即使在重新启动应用程序后,它也将始终打开上次打开的位置。如果任何人不想在重新启动后始终在与上次打开位置相同的位置重新打开,则您需要更改。我正在修理。