如何为JFrame设置图标

27

我尝试了这种方式,但它没有改变?

ImageIcon icon = new ImageIcon("C:\\Documents and Settings\\Desktop\\favicon(1).ico");
frame.setIconImage(icon.getImage());

如果在您的文件路径中找不到图像,则会设置默认图像图标。看起来存在一些问题。 - prasanth
13个回答

45

建议使用 .png 格式的文件,.ico 格式是Windows专用的。最好不要使用文件,而是使用类资源(可以打包在应用程序的jar文件中)。

URL iconURL = getClass().getResource("/some/package/favicon.png");
// iconURL is null when not found
ImageIcon icon = new ImageIcon(iconURL);
frame.setIconImage(icon.getImage());

虽然您甚至可以考虑使用 setIconImages 为图标提供多种尺寸。


2
我一直收到空指针异常,即使图像路径是正确的。 - vijay
2
一个晚回复:图标应该与您调用getClass()的类在同一个jar文件中,并且路径使用/区分大小写。 - Joop Eggen
你知道如何从网址获取网站图标并在 setIconImage 中显示吗? - TheCoderGuy
1
是的,我的问题在于我使用了 ico 文件。更换为 PNG 格式后就可以了! - JFreeman
1
@JFreeman 一个要点:.ico 文件可以包含不同分辨率的多个图像。setIconImages 方法也可用于多个(单文件)图像,例如更大的 alt-tab 图标等。我之前没有提到这一点是为了避免进一步混淆问题。 - Joop Eggen
显示剩余6条评论

6

试着将你的图片放在一个独立的文件夹中,不要放在src文件夹里面。然后使用ImageIO来加载你的图片。代码应该像这样:

frame.setIconImage(ImageIO.read(new File("res/icon.png")));

上面的答案对我没用,但这个可以! - trinity420

4

最终我发现设置jframe图标的主要问题。这是我的代码。它类似于其他代码,但需要注意几个细节。

    this.setIconImage(new ImageIcon(getClass().getResource("Icon.png")).getImage());

1) 将这段代码放在jframe窗口打开事件中

2) 将图像放在所有表单和java文件创建的主文件夹中,例如:

src\ myproject\ myFrame.form
src\ myproject\ myFrame.java
src\ myproject\ OtherFrame.form
src\ myproject\ OtherFrame.java
src\ myproject\ Icon.png

3) 最重要的是文件名区分大小写,例如icon.png不起作用,但Icon.png可以。

这样做可以确保即使在最终构建项目后,您的图标仍然存在。


1

这对我起作用。

    frame.setIconImage(Toolkit.getDefaultToolkit().getImage(".\\res\\icon.png"));

对于导出jar文件,您需要配置构建路径以包含res文件夹并使用以下代码。
    URL url = Main.class.getResource("/icon.png");
    frame.setIconImage(Toolkit.getDefaultToolkit().getImage(url));

0

只需将这几行代码复制到您的代码中,并将“imgURL”替换为您想要设置为jframe图标的图像位置。

JFrame.setDefaultLookAndFeelDecorated(true);

//Create the frame.
JFrame frame = new JFrame("A window");

//Set the frame icon to an image loaded from a file.
frame.setIconImage(new ImageIcon(imgURL).getImage());

0

以下是我使用的代码,用于设置 JFrame 的图标。

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;

  try{ 
    setIconImage(ImageIO.read(new File("res/images/icons/appIcon_Black.png")));
  } 
  catch (IOException e){
    e.printStackTrace();
  }

0
你可以尝试以下方法:
myFrame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png"));

0

我使用 Maven 并且拥有项目结构,该结构是通过输入命令创建的:

mvn archetype:generate

必须将所需文件 icon.png 放置在您的Maven项目的 src/main/resources 文件夹中。

然后您可以在项目内使用以下代码:

ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("./icon.png"));
setIconImage(img.getImage());

0
ImageIcon img = new ImageIcon(Objects.requireNonNull(getClass().getClassLoader()
    .getResource("konashop/com/icon.png"))); // the URL should be within the src with the classes
frame.setIconImage(img.getImage());

2
尽量不要发布仅包含代码的答案。看看其他回答这个问题的答案。它们既包含代码,又有解释。 - Abra

0

我正在使用以下实用类为 JFrameJDialog 实例设置图标:

import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.Scanner;

public class WindowUtilities
{
    public static void setIconImage(Window window)
    {
        window.setIconImage(Toolkit.getDefaultToolkit().getImage(WindowUtilities.class.getResource("/Icon.jpg")));
    }

    public static String resourceToString(String filePath) throws IOException, URISyntaxException
    {
        InputStream inputStream = WindowUtilities.class.getClassLoader().getResourceAsStream(filePath);
        return toString(inputStream);
    }

    // https://dev59.com/UHVC5IYBdhLWcg3wZwJT#5445161
    private static String toString(InputStream inputStream)
    {
        try (Scanner scanner = new Scanner(inputStream, "UTF-8").useDelimiter("\\A"))
        {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
}

因此,使用它就像调用一样简单

WindowUtilities.setIconImage(this);

在扩展JFrame的类中的某个位置。

例如使用Maven时,Icon.jpg必须位于myproject\src\main\resources中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接