2008-08-28 42 views

回答

10

您可以通過設置您自己的FileSystemView來做到這一點。

+0

更多的參考,你如何得到默認的FileSystemView(例如委託給它)? – 2010-02-03 17:12:02

+1

@Jason S - 可能通過靜態方法`getFileSystemView()` – McDowell 2010-02-03 17:47:28

+0

如果有人可能需要它,這裏是OP想要的確切示例: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ – 2014-03-24 01:18:16

20

櫃面任何人都需要這樣的未來:

class DirectoryRestrictedFileSystemView extends FileSystemView 
{ 
    private final File[] rootDirectories; 

    DirectoryRestrictedFileSystemView(File rootDirectory) 
    { 
     this.rootDirectories = new File[] {rootDirectory}; 
    } 

    DirectoryRestrictedFileSystemView(File[] rootDirectories) 
    { 
     this.rootDirectories = rootDirectories; 
    } 

    @Override 
    public File createNewFolder(File containingDir) throws IOException 
    {  
     throw new UnsupportedOperationException("Unable to create directory"); 
    } 

    @Override 
    public File[] getRoots() 
    { 
     return rootDirectories; 
    } 

    @Override 
    public boolean isRoot(File file) 
    { 
     for (File root : rootDirectories) { 
      if (root.equals(file)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

顯然需要做出更好的「createNewFolder」的方法,但是這確實限制用戶對多個目錄中的一個。

而且使用這樣的:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\")); 
JFileChooser fileChooser = new JFileChooser(fsv); 

或像這樣:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File[] { 
    new File("X:\\"), 
    new File("Y:\\") 
}); 
JFileChooser fileChooser = new JFileChooser(fsv); 
5

阿蘭的解決方案已接近完成。三個問題是開放的解決:

  1. 點擊「首頁」 - 鍵踢用戶進行限制
  2. DirectoryRestrictedFileSystemView不是包外部訪問
  3. 出發點是不是root

  1. 追加@Override到DirectoryRestrictedFileSystemView

public TFile getHomeDirectory() { return rootDirectories[0]; }

  1. 集類和構造public

  2. 變化JFileChooser fileChooser = new JFileChooser(fsv);JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

我用它來限制用戶通過TrueZips TFileChooser和留在一個zip文件對上面的代碼進行細微的修改,這是完美的。非常感謝。

-1

不需要那麼複雜。您可以輕鬆地設置一個JFileChooser的選擇模式,這樣

JFileChooser fc = new JFileChooser(); 
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
fc.setMultiSelectionEnabled(false); 

你可以在這裏閱讀How to Use File Choosers