【问题标题】:Set Image Icon in Panel在面板中设置图像图标
【发布时间】:2012-04-22 09:31:31
【问题描述】:

我想在面板中设置一个图像图标。我正在尝试这样做;

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

但是图片没有显示。有什么建议我做错了吗?

【问题讨论】:

  • 请编辑您的问题以包含一个sscce,以显示您添加标签的容器的布局。
  • 您使用的是哪个 IDE,或者您手动操作。你得到了很好的答案,这个关于How to Access Images (Application Resouces)的帖子可能会帮助你进一步。

标签: java swing


【解决方案1】:

new ImageIcon() 构造函数只是创建一个未初始化的图像图标。您必须调用返回 ImageIcon 源的 createImageIcon() 方法以分配给您还创建的 ImageIcon 对象。

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

【讨论】:

  • 我应该为 createImageIcon 方法导入什么?
  • 显然它返回 ImageIcon 对象。 ImageIcon 类属于swing,属于javax。
【解决方案2】:
new ImageIcon("logo.jpg")

ImageIcon 的基于 String 的构造函数假定字符串表示文件路径。由于这是一个添加到面板的图像,因此在运行时,它可能位于 Jar 中,并且无法作为 File 访问。对于嵌入式应用程序资源,唯一可行的访问权限是URL。该 URL 可能是从以下内容获取的:

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

注意前导/。这告诉 JRE 在相对于类路径的根的路径上搜索资源,而不是相对于加载它的类的包的路径。

【讨论】:

    【解决方案3】:

    关于创建ImageIcon,您有两个很好的答案。您还应该查看添加标签的容器的布局。这个example 使用FlowLayoutJPanel 的隐式默认值。

    【讨论】:

    • 我还在等着看SSCCE,以确定布局是否也影响了图像的不外观。为这两个想法 +1。
    • 胜算在你;但我已经检查了内脏,我要站着/坐着拍拍。 :-)
    • 嗯,预感从来没有让我失望过,所以我的回答可能是错误的。小心你坐的地方,那些内脏到处都是。 :)
    猜你喜欢
    • 2013-06-27
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    相关资源
    最近更新 更多