2012-05-09 13 views
8

JFileChooser için Windows Bak ve Hissedin'de, JFileChooser iletişim kutusunun sol tarafı beş düğme gösterir: Son Öğeler, Masaüstü, Belgelerim, Bilgisayar ve Ağ. Bunların her biri, Windows Gezgini bunları gösterecek şekilde dosya sistemi görünümlerini temsil eder. SetSelectedFile() veya setCurrentDirectory() yöntemleri çağrılmadıkça JFileChooser varsayılan olarak Belgelerim Görünümüne gider.JFileChooser Varsayılanı Belgelerim yerine Bilgisayar Görünümüne nasıl yapılır

Kullanıcının, "Bilgisayar" Görünümü'nde görünmesi gereken bir dizi eşlenmiş ağ sürücüsünden birini seçmesini kolaylaştırmaya çalışıyorum. JFileChooser'ın varsayılan olarak "Bilgisayar" görünümünü açmasını sağlamanın bir yolu var mı?

Bunu yapmak için birkaç yöntem denedim, en son kök dizini bulmak ve currentDirectory olarak ayarlamak ancak bu, bu kök düğümünün içeriğini gösterir. En son kod aşağıda yer almaktadır.

private File originalServerRoot; 
private class SelectOriginalUnitServerDriveListener implements ActionListener 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      JFileChooser origDriveChooser = new JFileChooser(); 
      origDriveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      File startFile = new File(System.getProperty("user.dir")); //Get the current directory 

      // Find System Root 
      while (!FileSystemView.getFileSystemView().isFileSystemRoot(startFile)) 
      { 
       startFile = startFile.getParentFile(); 
      } 

      origDriveChooser.setCurrentDirectory(startFile); 
      origDriveChooser.setDialogTitle("Select the Mapped Network Drive"); 
      int origDriveChooserRetVal = origDriveChooser.showDialog(contentPane,"Open"); 
      if (origDriveChooserRetVal == JFileChooser.APPROVE_OPTION) 
      { 
       originalUnitServerRoot = origDriveChooser.getSelectedFile(); 

      } 
     } 
    } 

beni varsayılan olarak "Bilgisayar" görünümü (Ağı'nda veya herhangi bir başka görünümü) seçmenize olanak tanıyan bir yöntem veya JFileChooser kandırmak için herhangi bir yolu var mı? hızlı ve eksiksiz yanıtlar için

DÜZENLEME
teşekkürler. Eels'in Hovercraft'ını ve Guillaume Polet'in kodları herhangi bir sürücü mektubunda çalışmasını denemek için bir araya getirdim. Elde edilen kod aşağıdaki gibidir. Bir kez daha teşekkürler.

private File originalServerRoot; 
private class SelectOriginalUnitServerDriveListener implements ActionListener 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      JFileChooser origDriveChooser = new JFileChooser(); 
      origDriveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      File startFile = new File(System.getProperty("user.dir")); //Get the current directory 

      // Find System Root 
      while (!FileSystemView.getFileSystemView().isFileSystemRoot(startFile)) 
      { 
       startFile = startFile.getParentFile(); 
      } 
      //Changed the next line 
      origDriveChooser.setCurrentDirectory(origDriveChooser.getFileSystemView().getParentDirectory(rootFile)); 
      origDriveChooser.setDialogTitle("Select the Mapped Network Drive"); 
      int origDriveChooserRetVal = origDriveChooser.showDialog(contentPane,"Open"); 
      if (origDriveChooserRetVal == JFileChooser.APPROVE_OPTION) 
      { 
       originalUnitServerRoot = origDriveChooser.getSelectedFile(); 

      } 
     } 
    } 

cevap

7

İşte bir çalışma örneğidir. C: \ geçerli bir yol olduğu varsayımını yapar. Bu FileSystemView.getParentDir(File)

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class Test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().initUI(); 
      } 
     }); 
    } 

    protected void initUI() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     final JButton button = new JButton("Select files..."); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       final JFileChooser chooser = new JFileChooser(); 
       chooser.setCurrentDirectory(
           chooser.getFileSystemView().getParentDirectory(
            new File("C:\\"))); 
          chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
       chooser.showDialog(button, "Select file"); 
      } 
     }); 
     panel.add(button); 
     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

1+ ve ditto, bu da iyi çalışıyor. –

4

Bunu yapmanın kludge yolu elde Dosya toString() "Bilgisayar" kadar varsayılan dizinin üst elde etmektir. gibi bir şey:

FileSystemView fsv = FileSystemView.getFileSystemView(); 
    File defaultFile = fsv.getDefaultDirectory(); 
    while (defaultFile != null) { 
    defaultFile = defaultFile.getParentFile(); 
    if (defaultFile != null && "Computer".equalsIgnoreCase(defaultFile.toString())) { 
     JFileChooser fileChooser = new JFileChooser(defaultFile); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     int result = fileChooser.showOpenDialog(null); 
     if (result == JFileChooser.APPROVE_OPTION) { 
      File file = fileChooser.getSelectedFile(); 
      System.out.println(file); 
     } 
    } 
    } 
+0

+1 kullanır: bunu ben FileSystemView' daha temiz olacağını 'isComputerNode (Dosya)' yöntem vardır 'öğrendim –

+3

çok çalışır Dizeleri karşılaştırmak. –

+1

@GuillaumePolet: Bunu kullanarak denedim ama işe yaramadı: 'if (defaultFile = null && fsv.isComputerNode (defaultFile)!) {' Haklısınız –

0
//Specify the absolute path of the Mapped Drive 

chooser.setCurrentDirectory(new File("B:\\exampleFolder")); 

VEYA

// set the file opener to look at the desktop  

JFileChooser chooser = new JFileChooser();   
chooser.setCurrentDirectory(new File(System.getProperty("user.home") + "\\Desktop"));