将selectedFile设置为Java中文件选择器上的目录

将selectedFile设置为Java中文件选择器上的目录,java,jfilechooser,Java,Jfilechooser,长期开发人员,Java新手 我将JFileChooser对象与SelectionMode一起仅用于目录\u。它是从JTextField旁边的Browse JButton启动的,在进行选择后,我将在该JTextField中存储目录 我的问题是:当我第二次点击我的浏览按钮来选择一个目录时,我怎样才能让它在文件选择器中打开之前选择的目录?允许我展开,我可以将当前目录设置为JTextfield中值的父目录,或者将所选文件设置为JTextfield中的值,但是在任何一种情况下,我之前选择的目录的实际最终分

长期开发人员,Java新手

我将JFileChooser对象与SelectionMode一起仅用于目录\u。它是从JTextField旁边的Browse JButton启动的,在进行选择后,我将在该JTextField中存储目录

我的问题是:当我第二次点击我的浏览按钮来选择一个目录时,我怎样才能让它在文件选择器中打开之前选择的目录?允许我展开,我可以将当前目录设置为JTextfield中值的父目录,或者将所选文件设置为JTextfield中的值,但是在任何一种情况下,我之前选择的目录的实际最终分支都不会被选择

如果我用一个文件选择器做了一个类似的练习,并且只选择了文件模式_;当我将所选文件设置为以前选择的文件时,它将打开到父目录,文件在文件选择器中高亮显示,其完整路径显示在文件选择器底部的文本字段中

这里是我的代码的一个精简版本,它应该演示我所说的内容

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,而是使用

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

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

如果不存在父级,则返回null。您可以使用toString检索路径字符串。

使用setCurrentDirectory将文件选择器打开到先前选择的目录,并基本上提示选择其下方的目录。我希望能够打开所选目录的父目录,并使所选目录以与文件相同的方式显示为所选目录。如果您仅将上述代码中的目录更改为文件,您可以了解我想要实现的目标。@mascoj我感谢您的帮助,但我认为您没有理解我想要实现的目标。也许我解释得不够清楚。让我再试一次。如果我有一个仅包含selectionMode of FILES_的文件对话框,并且我设置了所选文件,它会打开一个指向该文件父目录的文件对话框,并将该文件的完整路径放入该对话框的文件名字段中。这是文件夹所需的行为。如果我有一个文件对话框,其中只有目录的selectionMode\u,我无法提供一个值以显示在对话框的文件夹名称字段中。如果我使用setCurrentDirectory,它将打开到该位置,而文件夹名称字段中没有任何内容。如果我将SelectedFile设置为目录路径,则在打开对话框时,它将使用CurrentDirectory的父目录,但文件夹名称字段再次留空。