У меня есть функция openFileAction()
, которая вызывается, когда я нажимаю «Файл» > «Открыть» в моем JMenuBar
. Его первые строки выглядят так:
private static String myPath = ... // some path
private void openFileAction() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(myPath));
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File f = null;
try {
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
fileChooser.setFileFilter(new FileNameExtensionFilter(null, ".txt");
f = fileChooser.getSelectedFile();
...
Я хочу видеть только .txt
файлы в качестве предложений, поэтому я вызываю setFileFilter()
на свой fileChooser
.
Это отлично работает для каталога fileChooser
, myPath
-- то есть в появившемся всплывающем окне «Открыть» я вижу только .txt
файлы (и папки) в этом каталоге. Однако, если я перехожу от myPath
во всплывающем окне, скажем, к Desktop
, я вижу там файлы (и папки) все, а не только файлы .txt
, как хотелось бы.
Как я могу видеть только файлы .txt
в любом каталоге, в который я перехожу?
Во-первых, настройте диалог так, как вы хотите, прежде чем показывать его, поэтому вместо...
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(myPath));
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File f = null;
try {
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
fileChooser.setFileFilter(new FileNameExtensionFilter(null, ".txt");
f = fileChooser.getSelectedFile();
Вы должны делать что-то более похожее на...
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(myPath));
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
fileChooser.setFileFilter(new FileNameExtensionFilter(null, ".txt");
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File f = null;
try {
f = fileChooser.getSelectedFile();
Во-вторых, правильно настройте FileFilter
. Вы должны дать ему какое-то «описание», так как это предоставляется пользователю, и вам не нужен .
в расширении, вместо этого он должен быть больше похож на...
fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt");
import java.awt.EventQueue;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
File myPath = new File(".");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(myPath);
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt"));
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("You have selected " + selectedFile);
}
}
});
}
}
Я бы также подумал о том, чтобы присмотреться к Как использовать средства выбора файлов
Ах да, конечно ... Это сработало как шарм, я принял ответ :) И да, точка перед расширением была ошибкой, которую я уже уловил, но она вернулась.
Настройте диалог перед звонком
fileChooser.showOpenDialog(this)