将 selectedFile 设置为 Java 中 FileChooser 上的目录

Setting the selectedFile to a directory on a FileChooser in Java

资深开发者,Java新手。

我正在使用 JFileChooser 对象和 DIRECTORIES_ONLY 的 SelectionMode。它是从 JTextField 旁边的 Browse JButton 启动的,在创建 selection 后,我将目录存储在该目录中。

我的问题是:当我再次单击“浏览”按钮尝试 select 一个目录时,如何才能使用之前 select 编辑的目录 [=27] 打开它=]在文件选择器中编辑?请允许我展开,我可以将当​​前目录设置为我的 JTextfield 中值的父级或将 selected 文件设置为我的 JTextfield 中的值,但在任何一种情况下都是目录的实际最终分支我之前选择的不是selected.

如果我使用 SelectionMode 为 FILES_ONLY 的文件选择器进行类似练习;当我将 selected 文件设置为之前的 selected 文件时,它会打开到父目录并且该文件在文件选择器中突出显示并且它的完整路径出现在底部的文本字段中文件选择器。

这是我的代码的精简版,应该可以说明我在说什么。

import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.lang.reflect.*;
import java.nio.charset.*;
import java.nio.file.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.filechooser.*;

public class myFrame extends JFrame {
public myFrame() {

JLabel lblProjDir = new JLabel("Project Directory:");
JTextField txtProjDir = new JTextField(System.getProperty("user.home"));
JButton btnBrowse= new JButton("...");
JButton btnOK = new JButton("OK");

add(lblProjDir);
add(txtProjDir);
add(btnBrowse);
add(btnOK);

btnBrowse.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent e ){
JFileChooser fileDialog = new JFileChooser();
fileDialog.setSelectedFile( new java.io.File(txtProjDir.getText()));
fileDialog.setDialogTitle("Set Working Project Directory");
fileDialog.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileDialog.setAcceptAllFileFilterUsed(false);

if (fileDialog.showOpenDialog(btnBrowse) == JFileChooser.APPROVE_OPTION) {
txtProjDir.setText("" + fileDialog.getSelectedFile());
} } } );

btnOK.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent e ){
setVisible(false);
//Do some other actions here with data collected
dispose();
}
} );

setSize(200, 200);
setMinimumSize(new Dimension(200,200));
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new myFrame();
}
} );
}
}

如有任何帮助,我们将不胜感激。 :)

不使用 setSelectedFile,而是使用 setCurrentDirectory

要访问父目录,请使用 Paths 工厂创建路径并检索其父目录:

Paths.get( <directory path> ).getParent();

如果不存在父项,这将 return 为 null。您可以使用 toString() 检索路径字符串。