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

时间:2015-10-16 17:15:06

标签: java jfilechooser

长期开发人员,Java新手。

我正在使用带有SelectionMode的JFileChooser对象DIRECTORIES_ONLY。它是从JTextField旁边的Browse JButton启动的,我在选择完成后存储目录。

我的问题是:当我第二次单击“浏览”按钮尝试选择目录时,如何使用“文件选择器”中选择的先前选择的目录打开它?允许我展开,我没有问题将当前目录设置为我的JTextfield中的值的父级或将所选文件设置为我的JTextfield中的值,但在任何一种情况下,我之前选择的目录的实际最终分支是未选中。

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

这是我的代码的精简版本,应该展示我正在谈论的内容。

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();
}
} );
}
}

非常感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:0)

而不是使用setSelectedFile,而是使用setCurrentDirectory

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

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

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