2010-06-17 90 views
3

我在java swing中有一個問題,用戶必須選擇一個文件夾,所以我使用下面的代碼。JFileChooser在OS X中返回不正確的路徑(僅限文件夾模式)

JFileChooser fc = new JFileChooser(); 
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

if(fc.showDialog(singleton, SELECT) == JFileChooser.APPROVE_OPTION) { 
    File folder = fc.getSelectedFile(); 
    String path = folder.getPath() + File.separatorChar + MYAPPFOLDER; 
} 

現在有2種方式,用戶可以選擇文件夾

  1. 導航到該文件夾​​並選擇文件夾
  2. 導航到該文件夾​​,進入該文件夾,然後單擊選擇

兩種方式都正常工作在Windows,但在OS X上,我得到

如果我做1:path = Users/<username>/Desktop/MYAPPFOLDER

如果我做2:path = Users/<username>/Desktop/Desktop/MYAPPFOLDER

如何避免這種第二種情況?

在此先感謝。

回答

6

問題是,showDialog不知道這是一個加載還是保存操作,所以它會給你一個文本框來放入新的文件/文件夾名稱。當你點擊時,它被設置爲'Desktop'文件夾進入它(作爲雙擊的第一次單擊),並且如果用戶然後按下SELECT,那麼對話框假定您要創建一個具有該名稱的新文件夾並將其返回到路徑中。

一種解決方法是改用showOpenDialog調用,然後手動更改選擇器的標題並將按鈕批准爲SELECT。這樣,用戶永遠不會看到新的目錄文本框。

的代碼會是這個樣子:

JFileChooser fc = new JFileChooser(); 
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

fc.setDialogTitle("Select a folder"); 
fc.setApproveButtonText(SELECT); 
if(fc.showOpenDialog(singleton) == JFileChooser.APPROVE_OPTION) { 
    File folder = fc.getSelectedFile(); 
    String path = folder.getPath() + File.separatorChar + "MYAPPFOLDER"; 
} 
+1

我原本並不打算給予好評這一點,那麼我在設置自定義審批按鈕文本默認的對話框類型'JFileChooser.CUSTOM_DIALOG'的Javadoc看到(默認是打開的對話框)。 – Powerlord 2010-06-17 19:01:23

相關問題