2012-04-22 76 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