【问题标题】:How do I change image icon of a JFrame?如何更改 JFrame 的图像图标?
【发布时间】:2021-10-12 05:38:34
【问题描述】:

我查看了其他答案并尝试了:

ImageIcon img = new ImageIcon(url);
setIconImage(img.getImage());

和:

URL imgURL = getClass().getClassLoader().getResource(url);
if (imgURL != null) {
    System.out.println("Found icon image: "+imgURL);
    Image image=Toolkit.getDefaultToolkit().getImage(imgURL);
    setIconImage(image);
} else {
    System.err.println("Could not find icon image");
}

JFrame 类中,我将图像文件放在资源文件夹中,以及与我的.java 文件和我的项目的根文件夹相同的文件夹,甚至在开头包含“/”符号URL 字符串,但没有任何效果。我想知道最近是否有人尝试过它并让它工作?

【问题讨论】:

  • url 字符串里面是什么?
  • 为您的项目创建一个资源文件夹。将图像文件放在资源文件夹中。将资源文件夹放在类路径上。阅读此Stack Overflow question 的答案。
  • 1) 将 getClass().getClassLoader().getResource(url); 更改为简单的 getClass().getResource(url);。类加载器不适用于应用程序资源。 2) 使用ImageIO 加载图片。如果出现问题,它将提供有用的输出(通过Throwable.printStackTrace()。3)将图像放在类路径根目录的resources路径中(不在另一个包中)并使用@987654333启动String @
  • 我根据吉尔伯特提供的链接的第一个答案添加了一个资源文件夹,并尝试了提供的建议。它能够找到该文件,但由于某种原因它不会更改图标图像。
  • 看起来资源文件夹已添加到路径中,并且 url 是“icon.png”,我也尝试了“/resources/”,但如果我这样做,它找不到文件。但它使用“icon.png”找到它。

标签: java swing jframe embedded-resource


【解决方案1】:

我不知道url 字符串中的内容,但还有另一种方法可以将图标设置为JFrame

frame.setIconImage((Image)ImageIO.read(getClass().getResourceAsStream("/imagename.png")));

/ 符号表示您的路径是 relative 到您的项目根目录。

编辑:

JFrame.setIconImage(Image image) 不适用于 macOS。

相反,您可以使用com.apple.eawt.Application 包中的Application.getApplication().setDockIconImage(Image image) 来使其工作。 (如@Valencia Starr 所述)

【讨论】:

  • 网址是“icon.png”。它能够找到该文件,并且资源文件夹似乎已添加到路径中,但由于某种原因,图标图像没有改变。
  • 更新:我在 Windows 设备上尝试过它并且它可以工作。是mac不行。
  • @ValenciaStarr macOS 似乎不支持 jframe 图标。我现在不能尝试,但您应该可以使用此参数更改运行 jar 的图标:Xdock:icon="/path/to/myicon.icns"。让我知道它是否有效,以便我编辑答案。
  • 我让它工作了。我导入了 com.apple.eawt.Application 包并使用了适用于 mac 而不是 windows 的 Application.getApplication().setDockIconImage(image)。所以显然 Mac 是随库一起安装的,我还必须确保我的构建路径中有 Java 1.8。所以 setIconImage(Image img) 适用于 Windows, Application.getApplication().setDockIconImage(Image img) 适用于 Mac。非常感谢您的回复和帮助。非常感谢。
【解决方案2】:

我让它工作了。

显然,Mac 安装了一个库,我还必须确保我的构建路径中有 Java 1.8。

我导入了com.apple.eawt.Application 包并使用了Application.getApplication().setDockIconImage(image),它适用于macOS 而不是Windows。

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2011-09-01
    • 2020-05-06
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多