有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在处理这个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 

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


共 (1) 个答案

  1. # 1 楼答案

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

    更新

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

    我倾向于做的是欺骗。我将最后一个目录值存储在PreferencesAPI中,之所以这样做是因为它非常简单,而且还意味着该值在执行过程中保持不变,非常有用。如果您不想在执行过程中保持它,可以使用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);
        }
    
    }