JFileChooser,想将其锁定在一个目录中

4

我有一个程序,用户可以通过它下载文件,我希望将JFileChooser锁定到一个文件夹(directory)中,这样用户就不能浏览其他内容。他只能从例如"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());
                }
3个回答

6

设置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);
    }
});

谢谢(L),完美运作。 - Joakim Hansen

5

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);
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接