2012-12-09 63 views
4

我想讓一個JFileChooser選擇一個文件夾。在這個FileChooser中,我希望用戶可以選擇創建一個新文件夾,然後選擇它。我注意到JFileChooser的「保存」對話框默認有一個「新建文件夾」按鈕,但在「打開」對話框中沒有出現類似的按鈕。有誰知道如何添加一個「新建文件夾」按鈕到「打開」對話框?如何添加一個「新建文件夾」按鈕到一個JFileChooser

Specificially,我想按鈕添加到使用此代碼創建一個對話框:

  JFrame frame = new JFrame(); 

      JFileChooser fc = new JFileChooser(); 

      fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      fc.setFileFilter(new FileFilter(){ 
       @Override 
       public boolean accept(File f) { 
        return f.isDirectory(); 
       } 
       @Override 
       public String getDescription() { 
        return "Any folder"; 
       } 
      }); 

      fc.setDialogType(JFileChooser.OPEN_DIALOG); 
      frame.getContentPane().add(fc); 

      frame.pack(); 
      frame.setVisible(true); 
+2

爲什麼它必須是「打開」對話框?您可以保存對話框,只需更改批准按鈕上的標籤即可。 – mercutio

+0

謝謝mercutio。這有幫助。我在下面的解決方案中使用了這個想法。 –

+0

我認爲它不存在的原因是,根據定義,「Open」意味着一個現有的文件。如果你正在創建一個新目錄,那麼**不能是現有的文件。考慮違反標準對話框的可用性,以及您將如何使用此功能。 –

回答

3

確定。最後,我通過使用「保存」對話框而不是「打開」對話框來解決此問題。標準的保存對話框已經有一個「新建文件夾」按鈕,但它也有一個「另存爲:」面板在頂部,這是我不想要的。我的解決方案是使用標準的保存對話框,但要隱藏「另存爲」面板。

這裏有一個保存對話框代碼:

  JFrame frame = new JFrame(); 

      JFileChooser fc = new JFileChooser(); 

      fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      fc.setFileFilter(new FileFilter(){ 

       @Override 
       public boolean accept(File f) { 
        return f.isDirectory(); 
       } 

       @Override 
       public String getDescription() { 
        return "Any folder"; 
       } 

      }); 

      fc.setDialogType(JFileChooser.SAVE_DIALOG); 
      fc.setApproveButtonText("Select"); 

      frame.getContentPane().add(fc); 


      frame.setVisible(true); 

這部分定位和隱藏的 「另存爲」 面板:

  ArrayList<JPanel> jpanels = new ArrayList<JPanel>(); 

      for(Component c : fc.getComponents()){ 
       if(c instanceof JPanel){ 
        jpanels.add((JPanel)c); 
       } 
      } 

      jpanels.get(0).getComponent(0).setVisible(false); 

      frame.pack(); 

最終結果:

enter image description here

編輯

這個解決方案有一個怪癖,如果用戶按下批准按鈕,而沒有當前選擇的目錄,就會出現這個問題。在這種情況下,選擇器返回的目錄將與用戶正在查看的任何目錄相對應,並與(隱藏)「另存爲:」面板中的文本連接。生成的目錄可能不存在。我用下面的代碼處理了這個問題。

    File dir = fc.getSelectedFile(); 
        if(!dir.exists()){ 
         dir = dir.getParentFile(); 
        } 
+0

哈克,但它的作品! –

相關問題