gpt4 book ai didi

Java:无法重新绘制 ImageIcon

转载 作者:行者123 更新时间:2023-11-30 08:53:14 26 4
gpt4 key购买 nike

我有一个JFrameJFrame里面是一个JPanelJPanel里面是12个JButtons。我为每个按钮设置了一个 ImageIcon

然后,我需要给 JButton 一个新的 ImageIcon。我试过这个:

buttons[0].setIcon(new ImageIcon("path/to/new/icon"));

但是没有用。还试过:

buttons[0].revalidate();
my_jpanel.revalidate();

所以我忘记了什么?为什么它不重绘?

最佳答案

您应该确保您正在加载您认为正在加载的文件。试试这个:

ImageIcon icon = new ImageIcon("path/to/new/icon");
System.out.println(icon.getDescription());

如果文件未正确加载,这将为 null。如果这是你的问题,请尝试使用绝对路径(例如 /home/waTEXmelon/program/blah.jpg 在 Linux 或 C:\\Users\\waTEXmelon\\program\\blah .jpg) 在 Windows 上。

如果您希望图标位于您的类路径中,请改用:

new ImageIcon(getClass().getResource("/class/path/to/icon"));

您还应该考虑 checking out ImageIO为了帮助防止您将来遇到此问题,它比基本构造函数更健壮。


如果以上不是您的问题,请考虑 Swing is not Thread Safe并且您可能正在修改事件调度线程以外的线程上的图标。尝试这样做:

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
buttons[0].setIcon(new ImageIcon("path/to/new/icon"));
}
}

如果 仍然 不能解决您的问题,那么问题可能出在@camrickr 的建议上,例如您要向其添加图标的 JButton 不是您认为要向其添加图标的那个。要对此进行测试,请在创建按钮和更新图标时执行以下操作:

System.out.println(System.identityHashCode(button[0]));

如果不匹配,则按钮不是同一个按钮。

关于Java:无法重新绘制 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com