2015-06-30 171 views
0

我想提示用戶在其中保存一些文件的目錄。因此,我成立了一個JFileChooser,按照這個簡單的演示應用程序:JFileChooser無法設置默認選擇

import javax.swing.JFileChooser; 

public class Demo { 
    public static void main(String[] args) { 
     new Demo(); 
    } 

    public Demo() { 
     JFileChooser chooser = new JFileChooser(); 
     chooser.setDialogTitle("Chooser test"); 
     chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     chooser.setAcceptAllFileFilterUsed(false); 
     chooser.showSaveDialog(null); 
    } 
} 

的問題是,「選擇」按鈕是灰色的,直到用戶以某種方式在文件選擇器進行交互,即使控制當前顯示目錄(在這種情況下,用戶的主目錄,儘管我的實際用例更具體)是一個完全有效的目的地。我試過使用JFileChooser.setSelectedFile()來設置默認選擇,但這仍然不會導致啓用「選擇」按鈕。

我預計在大多數情況下,我的用戶都希望使用我爲他們選擇的默認目錄,他們應該能夠點擊文件選擇器。我如何獲得「選擇」按鈕以實際啓用?

這是在OSX上,Java 6/7,以防萬一它是相關的。任何意見/建議表示讚賞。感謝您的時間。

+1

在Windows機器上測試它在Java 7和8上沒有問題..完美工作 – Madhan

+0

好的,所以這很可能是OSX當時的痛苦。感謝您的跨平臺測試。 – chris

回答

1

這看起來像在Mac JRE problem嘗試更新JRE/JDK到最新嘗試

總之添加

chooser.setCurrentDirectory(new File(System.getProperty("user.dir"))); 

這將currentDirectory位置設置爲使用currentDirectory

+0

不幸的是,沒有什麼區別。 – chris

+0

嘗試將JRE版本更新爲最新版本,如編輯後的 – Madhan

+0

那樣,這看起來確實有關係。謝謝。在我們的實際部署中,我們仍然需要暫時解決方法,這些部署都停留在Java 6上,但希望在未來幾個月的某個時候我們能夠升級到8. – chris

0

好吧,這似乎根據Madhan的評論,特定於OSX。記住,我找到了一個解決方法:調用JFileChooser.updateUI()將強制按鈕注意事情已經改變。以下是更新後的腳本:

import java.io.File; 

import javax.swing.JFileChooser; 

public class Demo { 
    public static void main(String[] args) { 
     new Demo(); 
    } 

    public Demo() { 
     JFileChooser chooser = new JFileChooser(); 
     chooser.setDialogTitle("Chooser test"); 
     chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     chooser.setAcceptAllFileFilterUsed(false); 
     File root = chooser.getCurrentDirectory(); 
     chooser.setCurrentDirectory(new File(root.getParent())); 
     chooser.setSelectedFile(root); 
     chooser.updateUI(); 
     chooser.showSaveDialog(null); 
    } 
} 

的呼叫setCurrentDirectorysetSelectedFile看起來確實是必要的,很遺憾。至少它有效。感謝你的幫助,Madhan;我假設我做錯了什麼,所以知道這是一個操作系統/外觀和感覺問題,指向我尋找解決方法。

+0

您是否在OSx中測試過什麼是JRE版本 – Madhan

+0

我正在OSX上開發,是的。 JRE是1.7.0_67-b01。 – chris

+0

所以'chooser.updateUI();'做的伎倆或它一直工作正常,沒有這也 – Madhan