2013-02-27 64 views
1

我想在jfilechooser中显示当前目录的父文件夹。
我想要显示该文件夹与..它是指父文件夹jFilechooser显示文件夹

+1

'jfilechooser.setCurrentDirectory(jfilechooser.getCurrentDirectory()。的getParent())'??这将抛出一个'null'指针例外,如果你在一个根级文件夹... – MadProgrammer 2013-02-27 05:50:35

+0

像其他文件夹那里,当我们去任何目录我想要显示父目录...当有人点击该文件夹。 。它移出当前目录并进入其父目录 – Complicated 2013-02-27 05:54:00

+0

因此,你想要显示类似树的东西,父文件夹作为根节点,并且其中的文件作为子节点? – MadProgrammer 2013-02-27 05:55:34

回答

3

使用构造函数,这样的文件路径作为参数。

JFileChooser jfc = new JFileChooser(".\\..");

退房JFileChooser(File currentDirectory)

+3

我们现在可以使用Java 7了,对于大多数人来说Java 1.4.2已经有点过时了...恕我直言 – MadProgrammer 2013-02-27 05:56:12

+0

+ 1更新后的链接 – 2013-02-27 06:00:48

2

这是实现您请求的功能的“尝试”,我遇到的问题是无法完全复制系统正在执行的操作。

基本上,目录组合框需要某种本地File对象(在Windows的情况下,为sun.awt.shell.Win32ShellFolder2)。但是我们似乎没有任何方法可以在提供的API中创建它们(并且您不希望手动创建它们,因为它会打破外观和跨平台功能)。

enter image description here

import core.util.MethodInvoker; 
import java.awt.EventQueue; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import javax.swing.JFileChooser; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.filechooser.FileSystemView; 
import javax.swing.plaf.ComponentUI; 

public class TestFileChooser { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        System.out.println(UIManager.getSystemLookAndFeelClassName()); 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFileChooser fc = new JFileChooser(new MyFileSystemView()); 
       fc.showOpenDialog(null); 

      } 
     }); 
    } 

    public static class MyFileSystemView extends FileSystemView { 

     @Override 
     public File[] getFiles(File dir, boolean useFileHiding) { 
      File[] files = super.getFiles(dir, useFileHiding); 

      List<File> fileList = new ArrayList<>(Arrays.asList(files)); 
      if (!isFileSystemRoot(dir)) { 
       File newPath = FileSystemView.getFileSystemView().createFileObject(dir, "/.."); 
       fileList.add(0, newPath); 
      } 
      files = fileList.toArray(files); 

      return files; 
     } 

     @Override 
     public File createNewFolder(File containingDir) throws IOException { 
      File newFolder = new File(containingDir + File.separator + "New Folder"); 
      if (!newFolder.mkdir()) { 
       newFolder = null; 
      } 
      return newFolder; 
     } 
    } 
} 
+0

谢谢你..那就是我需要的.. :) ..我要在我的代码中试试这个... – Complicated 2013-02-27 11:50:03

+0

我为VFSFilechooser应用相同的代码..但它不工作 – Complicated 2013-02-27 13:19:02