Comment rendre JFileChooser par défaut à la vue de l’ordinateur au lieu de mes documents

Dans Windows Look and Feel pour JFileChooser, le côté gauche de la boîte de dialog JFileChooser affiche cinq boutons: Éléments récents, Bureau, Mes documents, Ordinateur et Réseau. Celles-ci représentent chacune des vues du système de fichiers que l’Explorateur Windows leur montrerait. Il semble que JFileChooser utilise par défaut la vue Mes documents, sauf si les méthodes setSelectedFile () ou setCurrentDirectory () sont appelées.

Je tente de faciliter la sélection par l’utilisateur d’un des nombreux lecteurs réseau mappés, qui doivent apparaître dans la vue “Ordinateur”. Est-il possible de définir le JFileChooser pour ouvrir la vue “Computer” par défaut?

J’ai essayé quelques méthodes pour le forcer, la plus récente étant de trouver le répertoire racine et de le définir comme répertoire actuel, mais cela montre le contenu de ce nœud racine. Le code le plus récent est inclus ci-dessous.

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

Existe-t-il une méthode permettant de sélectionner la vue “Ordinateur” par défaut (ou le réseau, ou toute autre vue), ou toute autre manière de tromper JFileChooser?

MODIFIER
Merci pour les réponses rapides et complètes. J’ai combiné les réponses d’Hovercraft Full Of Eels et de Guillaume Polet pour essayer de faire fonctionner le code sur n’importe quelle lettre de lecteur. Le code résultant est le suivant. Encore une fois, merci.

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

Voici un exemple de travail. Il fait l’hypothèse que C: \ est un chemin valide. Il utilise le 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(Ssortingng[] 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); } } 

Une manière simple de faire ceci est d’obtenir le parent du répertoire par défaut jusqu’à ce que le toSsortingng() du fichier obtenu soit “Computer”. quelque chose comme:

  FileSystemView fsv = FileSystemView.getFileSystemView(); File defaultFile = fsv.getDefaultDirectory(); while (defaultFile != null) { defaultFile = defaultFile.getParentFile(); if (defaultFile != null && "Computer".equalsIgnoreCase(defaultFile.toSsortingng())) { 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); } } } 
 //Specify the absolute path of the Mapped Drive chooser.setCurrentDirectory(new File("B:\\exampleFolder")); 

OU

 // set the file opener to look at the desktop JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(System.getProperty("user.home") + "\\Desktop"));