2013-02-27 87 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