2012-04-22 66 views
2

我想在面板中設置圖像圖標。我試圖這樣做;在面板中設置圖像圖標

JLabel label = new JLabel(new ImageIcon("logo.jpg")) 
panelHeader.add(label); 
add(panelHeader); 

但圖像沒有顯示。任何建議我做錯了什麼?

+2

請編輯您的問題以包含一個[sscce](http://sscce.org/),其中顯示了添加標籤的容器的佈局。 – trashgod 2012-04-22 09:47:45

+0

您正在使用哪個IDE,或者您正在手動執行此操作。你有很好的答案,這個線程,[如何訪問圖像(應用程序資源)](http://stackoverflow.com/a/9866659/1057230),可能可以幫助你進一步。 – 2012-04-22 11:16:59

回答

4

構造函數new ImageIcon()只是創建一個未初始化的圖像圖標。您必須調用createImageIcon()方法,該方法返回ImageIcon源以指定給您也創建的ImageIcon對象。

ImageIcon icon = createImageIcon("logo.jpg", "my logo"); 
JLabel label = new JLabel(icon); 
+0

我應該爲createImageIcon方法導入什麼? – 2012-04-22 09:44:36

+0

顯然它返回ImageIcon對象。 ImageIcon類屬於屬於javax的swing。 – miqbal 2012-04-22 09:48:33

3
new ImageIcon("logo.jpg") 

String基於構造函數的ImageIcon假定該字符串表示文件路徑。由於這是一個通過運行時添加到面板的圖像,因此它可能位於Jar內,因此無法作爲File訪問。對於嵌入式應用程序資源,唯一可行的訪問是URL。該網址可能從以下類似網址獲得:

URL logoUrl = this.getClass().getResource("/logo.jpg"); 

請注意領先的/。這告訴JRE搜索相對於類路徑根的路徑上的資源,而不是相對於加載它的類的包的路徑。

+1

+1 for'viable access' – miqbal 2012-04-22 10:29:59

3

創建ImageIcon有兩個很好的答案。您還應該查看添加標籤的容器的佈局。此example使用FlowLayout,默認爲JPanel

+0

我還在等待看到SSCCE,以確定佈局是否也影響圖像的非外觀。 +1這兩個想法。 – 2012-04-22 10:10:56

+0

賠率與你同在;但我已經檢查過內臟,我會站立/坐着拍拍。 :-) – trashgod 2012-04-22 10:21:27

+0

那麼,haruspication從來沒有讓我失望過,所以我的答案可能是錯的。要小心你坐的地方,那些內臟到處都是。 :) – 2012-04-22 10:36:23