我有这个程序你可以下载文件,我希望JFileChooser被锁定到一个文件夹(目录),以便用户无法浏览其他任何内容。他只能从文件夹“C:\ Users \ Thomas \ Dropbox \ Prosjekt RMI \ SERVER \”中选择文件。我试过这么搜索但没找到任何东西。 我的代码是:
String getProperty = System.getProperty("user.home");
JFileChooser chooser = new JFileChooser(getProperty + "/Dropbox/Prosjekt RMI/SERVER/"); //opens in the directory "//C:/Users/Thomas/Dropbox/Project RMI/SERVER/"
int returnVal = chooser.showOpenDialog(parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName());
这工作正常,但现在我可以转到Project RMI文件夹,我不想这样做。
提前致谢:)
编辑:我在你的帮助下做了什么:
JFileChooser chooser = new JFileChooser(getProperty + "/Dropbox/Project RMI/SERVER/");
chooser.setFileView(new FileView() {
@Override
public Boolean isTraversable(File f) {
return (f.isDirectory() && f.getName().equals("SERVER"));
}
});
int returnVal = chooser.showOpenDialog(parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: "
+ chooser.getSelectedFile().getName());
}
答案 0 :(得分:5)
制作自定义FileSystemView
,将其用作接受FSV的JFileChooser
constructors之一的参数。
答案 1 :(得分:4)
设置FileView
并覆盖isTraversable
方法,使其仅对您希望用户看到的目录返回true。
以下是一个例子:
String getProperty = System.getProperty("user.home");
final File dirToLock = new File(getProperty + "/Dropbox/Prosjekt RMI/SERVER/");
JFileChooser fc = new JFileChooser(dirToLock);
fc.setFileView(new FileView() {
@Override
public Boolean isTraversable(File f) {
return dirToLock.equals(f);
}
});
答案 2 :(得分:0)
在我的情况下,我需要禁用目录导航并选择不同的文件扩展名这是后人的另一种方法:一种禁用导航控件的小型递归方法:
private void disableNav(Container c) {
for (Component x : c.getComponents())
if (x instanceof JComboBox)
((JComboBox)x).setEnabled(false);
else if (x instanceof JButton) {
String text = ((JButton)x).getText();
if (text == null || text.isEmpty())
((JButton)x).setEnabled(false);
}
else if (x instanceof Container)
disableNav((Container)x);
}
然后打电话如下:
JFileChooser fc = new JFileChooser(imgDir);
disableNav(fc);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Images", "jpg", "gif", "png");
fc.setFileFilter(filter);
...