2012-05-09 8 views
8

Windows Look&Feel for JFileChooserでは、JFileChooserダイアログの左側に最近のアイテム、デスクトップ、マイドキュメント、コンピュータ、ネットワークの5つのボタンが表示されます。これらはそれぞれ、Windowsエクスプローラーが表示するファイルシステムのビューを表します。 JFileChooserは、setSelectedFile()またはsetCurrentDirectory()メソッドが呼び出されない限り、デフォルトでマイドキュメントビューに表示されます。マイドキュメントの代わりにJFileChooserをコンピュータビューにする方法

「コンピュータ」ビューに表示される、多数のマップされたネットワークドライブの1つをユーザーが簡単に選択できるようにしようとしています。デフォルトで「コンピュータ」ビューを開くようにJFileChooserを設定する方法はありますか?

強制的にいくつかの方法を試しましたが、最新のルートディレクトリを見つけてcurrentDirectoryとして設定しましたが、これはそのルートノードの内容を示しています。最新のコードは以下のとおりです。

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

      } 
     } 
    } 

は、私は、デフォルトでは「コンピュータ」ビュー(またはネットワーク、または他のビュー)を選択することを可能にする方法、またはJFileChooserのを騙しする方法はありますか?

EDIT
迅速かつ徹底的な回答をありがとう。私はHovercraft Full of EelsとGuillaume Poletの答えを組み合わせて、どのドライブレターでもコードを動作させるようにしました。結果のコードは次のとおりです。もう一度、ありがとう。これを行うには

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

      } 
     } 
    } 

答えて

7

ここは実例です。これは、C:\が有効なパスであることを前提にしています。それは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+と同上、それもうまくいきます。 –

4

その場しのぎの方法は、取得したファイルのtoString()は、「コンピュータ」になるまで、デフォルトのディレクトリの親を取得することです。次のようなものがあります。

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使用しています:それは私がちょうどFileSystemView'がよりきれいになります 'isComputerNode(ファイル)'メソッドを持つ 'ことが判明 –

+3

あまりにも動作しますストリングを比較する。 –

+1

@GuillaumePolet:これを使ってみましたが、うまくいかなかった: 'if(defaultFile!= null && fsv.isComputerNode(defaultFile)){' –

0
//Specify the absolute path of the Mapped Drive 

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

OR

// set the file opener to look at the desktop  

JFileChooser chooser = new JFileChooser();   
chooser.setCurrentDirectory(new File(System.getProperty("user.home") + "\\Desktop")); 
関連する問題