Java Swing:如何使 setFileFilter() 在 FileChooser 设置的目录之外工作
Java Swing: how to make setFileFilter() work beyond the directory the FileChooser is set to
我有一个函数 openFileAction()
,当我在我的 JMenuBar
中单击 'File' > 'Open' 选项时调用该函数。它的第一行看起来像这样:
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
个文件作为建议 -- 所以我在 fileChooser
上调用 setFileFilter()
。
这适用于目录 fileChooser
设置为 myPath
-- 即,在出现的 'Open' 弹出窗口 window 中,我只看到.txt
该目录中的文件(和文件夹)。但是,如果我在弹出窗口 window 中离开 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);
}
}
});
}
}
我也会考虑仔细看看 How to Use File Choosers
我有一个函数 openFileAction()
,当我在我的 JMenuBar
中单击 'File' > 'Open' 选项时调用该函数。它的第一行看起来像这样:
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
个文件作为建议 -- 所以我在 fileChooser
上调用 setFileFilter()
。
这适用于目录 fileChooser
设置为 myPath
-- 即,在出现的 'Open' 弹出窗口 window 中,我只看到.txt
该目录中的文件(和文件夹)。但是,如果我在弹出窗口 window 中离开 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);
}
}
});
}
}
我也会考虑仔细看看 How to Use File Choosers