2009-11-24 189 views
3

我正在嘗試使用Java AWT FileDialog,但我想用別的東西替換默認的Java對話框圖標。總之,代碼看起來是這樣的:爲什麼Java AWT FileDialog的setIconImage方法無法設置圖標?

Frame frame = new Frame(); 
Image image = ImageIO.read(new URL("file:/path/to/myfile.jpg")); 
FileDialog fileDialog = new FileDialog(frame, "Save As", FileDialog.SAVE); 

fileDialog.setIconImage(image); 
fileDialog.setDirectory("/path/to/directory"); 
fileDialog.setFile("filename.txt"); 

fileDialog.setVisible(true); 

我試過幾個變化,包括讀取圖像,裝箱的FileDialog,包裝框架不同的方法,設置了框的圖標等。但是,無論我嘗試什麼,FileDialog圖標都不會更改。當我設置框架的圖標並將框架設置爲可見時,框架顯示了正確的圖標,但對於FileDialog仍然是不可行的。

有什麼想法?

+0

使用JFileChooser並在其父JFrame上設置圖標,或創建子類並覆蓋createDialog()。這裏建議的解決方案: http://stackoverflow.com/questions/6994772/how-to-change-default-java-icon-in-jfilechooser – xorcus 2015-01-26 22:11:01

回答

1

這可能不適用於所有平臺。我猜FileDialog以某種方式使用操作系統提供的filedialog,如果這不支持圖標,你運氣不好。

+0

我認爲你的評論肯定是在正確的軌道上。我剛剛檢查並且Windows中的FileDialogs不會默認使用圖標。爲什麼在這個世界上他們默認使用Solaris中的Java圖標超出了我的想象(而且非常令人沮喪)。感謝您的輸入! – Adam 2009-11-24 17:38:00

2

作爲AWT組件的FileDialog將更多地綁定到本地平臺。在Solaris情況下,它可能會從啓動應用程序本身的java可執行文件中獲取圖標。

有沒有理由不能使用JFileChooser?

+0

該應用程序實際上是作爲Rich Client Platform應用程序在SWT中編寫的。不幸的是,SWT文件對話框對底層文件系統提供了太多不可定製的訪問權限(用戶應該能夠完成的所有操作都是保存/打開文件 - 我們無法爲他們提供刪除文件和目錄的能力)。這使我們可以選擇在SWT中創建我們自己的文件對話框或使用AWT文件對話框。如果我們使用JFileChooser,我們會失去原生的外觀和感覺。這是一個令人討厭的悖論,但它就是這樣。 – Adam 2009-11-30 15:40:55

相關問題