2012-05-09 6 views
8

Im linken Fenster des JFileChooser-Dialogfelds werden auf der linken Seite fünf Schaltflächen angezeigt: Zuletzt verwendete Elemente, Desktop, Eigene Dateien, Computer und Netzwerk. Diese repräsentieren Ansichten des Dateisystems, wie Windows Explorer sie anzeigen würde. Es scheint, dass JFileChooser standardmäßig die Ansicht "Eigene Dateien" verwendet, es sei denn, die Methoden setSelectedFile() oder setCurrentDirectory() werden aufgerufen.So stellen Sie den JFileChooser-Standard für die Computeransicht anstelle von Eigene Dateien ein

Ich versuche, es dem Benutzer einfach zu machen, eines aus einer Anzahl von zugeordneten Netzlaufwerken auszuwählen, die in der "Computer" -Ansicht erscheinen sollen. Gibt es eine Möglichkeit, den JFileChooser so einzustellen, dass er standardmäßig die Ansicht "Computer" öffnet?

Ich habe versucht, ein paar Methoden, um es zu erzwingen, die neueste zu finden, das Stammverzeichnis und legen Sie es als currentDirectory, aber das zeigt den Inhalt dieses Stammknotens. Der neueste Code ist unten enthalten.

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(); 

      } 
     } 
    } 

Gibt es eine Methode, die mir die „Computer“ Ansicht standardmäßig (oder das Netzwerk oder eine andere Ansicht) oder eine beliebige Art und Weise auswählen kann, die JFileChooser zu Trick?

BEARBEITEN
Danke für die schnellen und gründlichen Antworten. Ich habe die Antworten von Hovercraft Full Of Eels und Guillaume Polet kombiniert, damit der Code auf jedem Laufwerksbuchstaben funktioniert. Der resultierende Code ist wie folgt. Noch einmal, danke.

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(); 

      } 
     } 
    } 

Antwort

7

Hier ist ein funktionierendes Beispiel. Es macht die Annahme, dass C: \ ein gültiger Pfad ist. Es nutzt die 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+ und dito, das funktioniert auch gut. –

4

A kludge Weg, dies zu tun, ist das Standardverzeichnis der Eltern zu erhalten, bis die toString() der Datei erhalten wird, „Computer“. etwas wie:

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: Auch das –

+3

arbeitet ich gerade herausgefunden, dass '' FileSystemView' eine isComputerNode (File) hat 'Methode, die sauberer sein würde als Strings vergleichen. –

+1

@GuillaumePolet: Ich habe versucht, mit, aber es hat nicht funktioniert: 'if (defaultFile! = Null && fsv.isComputerNode (defaultFile)) {' –

0
//Specify the absolute path of the Mapped Drive 

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

ODER

// set the file opener to look at the desktop  

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