2015-10-16 2 views
0

Долгое время разработчик, Java-новичок.Установка выбранного файла в каталог на FileChooser в Java

Я использую объект JFileChooser с SelectionMode для DIRECTORIES_ONLY. Он запускается из Обзор JButton рядом с JTextField, где я храню каталог после выбора.

Мой вопрос заключается в следующем: когда я пытаюсь выбрать каталог, нажав на кнопку «Обзор» второй раз, как я могу открыть его с ранее выбранным каталогом, выбранным в File Chooser? Позвольте мне расшириться, у меня нет проблем с установкой текущего каталога родительскому значению в моем поле JText или установкой выбранного файла в значение в моем поле JText, но в любом случае фактическая конечная ветвь каталога, который я выбрал ранее, не выбран.

Если я делаю подобное упражнение с файловым выбором с SelectionMode из FILES_ONLY; когда я устанавливаю выбранный файл в ранее выбранный файл, он открывается в родительский каталог, и файл выделяется в файле chooser, и полный путь отображается в текстовом поле в нижней части файла выбора.

Вот урезанная версия моего кода, которая должна продемонстрировать то, о чем я говорю.

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

Любая помощь была бы принята с благодарностью. :)

+0

@mascoj Я ценю, что вы пытаетесь помочь, но я не думаю, что вы понимаете, чего я пытаюсь достичь. Возможно, я недостаточно объясняю это. Дай мне попробовать снова. –

+0

Если у меня есть диалоговое окно с файлом, в котором есть параметр выбора FILES_ONLY, и я устанавливаю выбранный файл, он открывает диалоговое окно файла в родительский каталог файла и помещает полный путь файла в поле «Имя файла» диалогового окна. Это желаемое поведение для папок. –

+0

Если у меня есть диалоговое окно с файлом, в котором есть параметр выбора DIRECTORIES_ONLY, у меня нет способа указать значение, которое появится в поле «Имя папки» диалогового окна. Если я использую setCurrentDirectory, он открывается в это место без ничего в поле «Имя папки». Если я установилSelectedFile в путь к каталогу, он использует родительский каталог для CurrentDirectory при открытии диалогового окна, но поле «Имя папки» снова остается пустым. –

ответ

0

Вместо того, чтобы использовать setSelectedFile, вместо этого используйте setCurrentDirectory.

Чтобы получить доступ к родительскому каталогу используйте Paths завод, чтобы создать путь и получить его родитель:

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

Это будет возвращать нулевое значение, если ни один родитель не существует. Вы можете получить строку пути с помощью команды toString().

+0

Использование setCurrentDirectory открывает файл выбора в ранее выбранном каталоге и в основном предлагает выбрать под ним директорию. Я хочу иметь возможность открыть родительский элемент выбранного каталога и отобразить выбранный каталог так же, как и файл. Если вы измените DIRECTORIES_ONLY на FILES_ONLY в коде выше, вы можете получить представление о том, чего я пытаюсь достичь. –

+0

Обновленный ответ. – mascoj

Смежные вопросы