在 Java 中设置图标图像

Posted

技术标签:

【中文标题】在 Java 中设置图标图像【英文标题】:Set Icon Image in Java 【发布时间】:2013-06-27 08:35:30 【问题描述】:

我一直在到处寻找如何,但它总是无法正常工作或给我错误。在这里,在我的主要方法中是我放代码的地方:

public static void main(String[] args) 
    Game game = new Game();

    // This right here! 
    game.frame.setIconImage(new ImageIcon("/Icon.png").getImage());

    game.frame.setResizable(false);
    game.frame.setTitle(title);
    game.frame.add(game);
    game.frame.pack();
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    game.frame.setLocationRelativeTo(null);
    game.frame.setVisible(true);


我的图像路径是“%PROJECT%/res/Image.png”,我只是使用 /Image.png 继续访问我的 res 文件夹(就像我在项目的其他部分所做的那样)我有甚至将其转换为图标文件,并尝试过,但它决定使用默认的 Java 图标。

【问题讨论】:

大约每 16 小时询问一次。您将来可能需要搜索。 +1 @AndrewThompsons 评论。阅读here。它应该可以帮助您解决 jar 中嵌入资源的大多数问题。 请注意,我已经删除了您的set 标签,因为您的问题与“集合”或一般集合的编程概念无关。我添加了swing 标签,因为这个标题与您的问题非常相关。 【参考方案1】:

您的问题通常是由于在错误的位置查找图像,或者如果您的类和图像位于 jar 文件中,则查找文件不存在的文件。我建议你使用资源来解决第二个问题。

例如,

// the path must be relative to your *class* files
String imagePath = "res/Image.png";
InputStream imgStream = Game.class.getResourceAsStream(imagePath );
BufferedImage myImg = ImageIO.read(imgStream);
// ImageIcon icon = new ImageIcon(myImg);

// use icon here
game.frame.setIconImage(myImg);

【讨论】:

当我使用它时,它会在 setIconImage 处引发错误,JFrame 类型中的方法 setIconImage(Image) 不适用于参数 (ImageIcon),它说要更改将它设置为 setIconImages 或将 ImageIcon 类型更改为 Image。 谢谢你的工作 :) 只需要在 try/catch 中放一些东西。【参考方案2】:

为此使用默认工具包

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png"));

【讨论】:

@Shzylo:这并不奇怪。【参考方案3】:

我用这个:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

public class IconImageUtilities

    public static void setIconImage(Window window)
    
        try
        
            InputStream imageInputStream = window.getClass().getResourceAsStream("/Icon.png");
            BufferedImage bufferedImage = ImageIO.read(imageInputStream);
            window.setIconImage(bufferedImage);
         catch (IOException exception)
        
            exception.printStackTrace();
        
    

只需将名为Icon.png 的图像放在资源文件夹中,并在扩展Window 系列的类(例如JFrameJDialog)的类中调用上述方法,并将其自身作为参数:

IconImageUtilities.setIconImage(this);

【讨论】:

【参考方案4】:

以下方法适用于 Java 7 及更高版本。

JFrame frame = new JFrame("MyAPP");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try 
    frame.setIconImage(ImageIO.read(YourClass.class.getResourceAsStream("/icon.png")));
 catch (IOException ex) 
    ex.printStackTrace();

frame.setVisible(true);

将您的icon.png 图像文件保存到/src/main/resources

【讨论】:

以上是关于在 Java 中设置图标图像的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中设置开关按钮的图标 [关闭]

如何在 iOS 的 xamarin.forms 应用程序中设置应用程序的应用程序图标

在 iPhone 6 和 6 plus 中设置背景图像和图标图像

在单元格中设置图标图像的问题

如何在 TableViewCell 中设置图标的背景颜色?

如何在 Xamarin 表单中设置工具栏项的图标