我正在处理这个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和所有这些。任何帮助将不胜感激。
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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句