2008-08-28 9 views

cevap

10

Muhtemelen kendi FileSystemView ayarlarınızı kullanarak bunu yapabilirsiniz.

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; 
    } 
} 

Oldukca iyi "createNewFolder" yöntemi yapmak gerekir, ancak bu daha fazla dizinleri birine kullanıcıyı kısıtlamak yapar:

+0

daha referansı okuyabilir bu

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

gibi JFileChooser seçimi modunu ayarlayabilirsiniz? –

+1

@Jason S - olasılıkla statik yöntemle getFileSystemView() ' – McDowell

+0

Sadece birisinin buna ihtiyacı varsa, OP'nin istediği şeyin tam bir örneği: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ –

20

Örtmek başkasının gelecekte buna ihtiyacı var.

Ve bu gibi kullanmak:

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

veya böyle

:

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

Çalışmıyor @Allain –

5

Allain çözümü neredeyse tamamlandı. Üç sorunlar çözmek için açıktır:

  • Başlangıç ​​noktası Root değil "Ev" -Butonuna tıklandığında

    1. kısıtlamalar dışında kullanıcıyı başladı
    2. DirectoryRestrictedFileSystemView paketinin dışında erişilemez

    1. @Override için DirectoryRestrictedFileSystemView Ekle

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

    1. seti sınıf ve yapıcı public

    2. Değişim JFileChooser fileChooser = new JFileChooser(fsv);JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

    içine ben TrueZips TFileChooser ve üzerinden bir zip dosyası içinde kalmak kullanıcıları sınırlamak için kullanabilirsiniz Yukarıdaki kodda küçük değişikliklerle, bu mükemmel çalışır. Çok teşekkürler.

  • -1

    Bu kadar karmaşık olmanıza gerek yok. Kolayca Sen varsayılan filesystemview alabilirim (örneğin kendisine temsilci) burada nasıl How to Use File Choosers

    +1

    Bu, genel olarak dizinlere sınırlar, ancak OP'nin sorusu olan belirli bir dizine değil. –