如何在JFrame中更改Java图标

10

好的,所以我已经做了很多研究。我对Java相当新,但认为这个应该很容易。我尝试了站点上几乎所有被回答过的方法,但仍然没有成功,通常当我在这里寻找答案时,我能够找到符合我要求的答案。有人知道如何更改JFrame顶部角落的Java图标吗?我非常确定这不是我的文件路径问题,因为我所有的图像都在同一个文件夹中,并且它们都能正常工作,这是唯一一个我似乎无法使其工作的。

这是我程序主菜单的第一部分,除了尝试添加图标图像时发生问题外,一切都正常运行。我下面输入的代码没有任何JFrame IconImage内容,因为它没有起作用。因此,如果有人知道如何在这段代码中让它工作,那将非常感激,并提前谢谢您!

public class MainFrame
{
private MyPanel main;
private MyPanel2 create;
private MyPanel3 update;
private MyPanel4 find;
JFrame frame = new JFrame("Main Menu:");

public void displayGUI()
{
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel contentPane = new JPanel();
    contentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    contentPane.setLayout(new CardLayout());
    main = new MyPanel(contentPane, this);
    create = new MyPanel2(contentPane);
    update = new MyPanel3(contentPane);
    find = new MyPanel4(contentPane);
    contentPane.add(main, "Main Menu");
    contentPane.add(create, "Create Part");
    contentPane.add(update, "Update Part");
    contentPane.add(find, "Find Part");
    frame.setLocation(200, 200);
    frame.setSize(700, 580);
    frame.setContentPane(contentPane);

    frame.setVisible(true);

}

只发布相关的代码。我们不想在你的一大堆代码中搜索更改框架图标的部分。然后告诉我们你期望这个相关代码部分做什么,以及它实际上做了什么。 - JB Nizet
这是更改图标部分应该在的代码部分。我尝试了许多不同的输入代码的方式,但这就是没有更改图标代码的JFrame的代码。 - Garrett Shaw
展示你最好的尝试,并告诉我们发生了什么。提示:http://docs.oracle.com/javase/6/docs/api/javax/swing/JFrame.html#setIconImage%28java.awt.Image%29,http://docs.oracle.com/javase/6/docs/api/javax/swing/ImageIcon.html#getImage%28%29,http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html - JB Nizet
每次尝试都没有任何反应,什么也没有改变,就像我从未输入过任何内容一样。 - Garrett Shaw
5个回答

15
我有一个答案给你。首先,确保图像在文件夹中而不是包中。接下来,插入这行代码:
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("path/to/image.png"));
ImageIcon icon = new ImageIcon( );
setIconImage(icon.getImage());

这段代码从类路径获取图像,并将其作为图像图标返回,然后设置它。这应该将图像图标添加到应用程序中。如果没有,请告诉我。

编辑:在你告诉我那个方法不起作用之后,我决定再试一次... 首先,将您的图像放入一个完全独立的文件夹中。我通常称之为/res。接下来,将您的图像放入其中。现在,对于加载,我采取了完全不同的路线。我决定使用ImageIO而不是默认加载。要加载图像,您可以使用以下代码:

try {
    frame.setIconImage(ImageIO.read(new File("res/icon.png")));
}
catch (IOException exc) {
    exc.printStackTrace();
}

ImageIO 在加载图像方面效果更好。如果仍然无法正常工作,请告诉我。

如果您想将其导出为 JAR 文件,则请在与 JAR 文件相同的目录中放置一个与程序中使用的名称相同的文件夹。


这对我没有起作用,我甚至确保它在文件夹中而不是包中。 - Garrett Shaw
我应该把它放在代码的哪里?我尝试将其放在frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);的下面。 - Garrett Shaw
我已经将代码行放在frame.setDefaultCloseOperation的前面。这样,我们就知道图标在任何其他操作发生之前被设置了。 - user2675678
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Subhash

4
例如,在 NetBeans 项目中,创建一个 resources 文件夹在 src 文件夹内。
将您的图像(jpg,...)放在其中。
无论您使用 ImageIO 还是 Toolkit (包括 getResource),您必须在图像文件路径中包含前导 /:
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resources/agfa_icon.jpg"));
setIconImage(image);

如果这段代码在你的JFrame类中,那么这张图片将作为图标添加到你的标题栏。

2
这对我来说运行得很好。 只需在创建您的JFrame之后添加此内容即可。
try {
   Image image = new ImageIcon("/icons/image.jpg").getImage();
   frame.setIconImage(image);
}catch(Exception e){
   System.out.println("Application icon not found");
}

1
请避免仅提供代码的答案。您应该始终在问题中提供有关问题原因、可能的解决方案和示例代码的说明(如下所示)。花点时间帮助他人。 - Victor Polevoy

1
  1. 首先将您的图像图标(fav.png)粘贴到相同的包中,
  2. JFrame构造函数中编写以下代码:

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("fav.png")));

注意: fav.png 是图标的名称


0
this.setIconImage(new ImageIcon(getClass().getResource("/iconsfolder/iconsname.jpg")).getImage()); 
          // sets the Global icon for the system

尝试将此代码放在此代码后面:
public void displayGUI()
{

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