我正在处理这个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和所有。任何帮助将不胜感激。
答案 0 :(得分:1)
每次需要时都会创建JFileChooser
的新实例,或致电setSelectedFiles
并传递null
所以,我快速浏览了setSelectedFile
和setSelectedFiles
方法,他们应该清除选择和“文件名”字段,但它似乎对我不起作用在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);
}
}