【问题标题】:Set icon in JFrame在 JFrame 中设置图标
【发布时间】:2012-10-15 08:52:32
【问题描述】:

我想更改项目的图标而不是 java 图标。当程序图标显示在状态栏中时,应该显示自定义图标而不是默认的java图标。

我正在使用以下代码。请告诉我这段代码有什么问题。

class newframe extends JFrame 
{

    Container cp;
    newframe()
    {
        cp=this.getContentPane();
        cp.setLayout(null);
    }

    public static void main(String args[])
    {
        newframe frm= new newframe(); 

        frm.setbounds(0,0,1000,800);
        frm.setVisible(true);
        ImageIcon im1= new ImageIcon("path upto image");
        frm.setIconImage(im1.getImage());
    }
}

【问题讨论】:

  • 我想要一匹小马……和冰淇淋。我的建议是每个问题都问一个问题,当你得到一个好的答案时,接受它,当你得到一个不好的答案时,请向提供者询问更多细节。
  • @AndrewThompson 我想要一架直升飞机......虽然我很想
  • 您可能还想看看Window#setImageIcons(List),它采用Image 的列表,它允许您提供许多不同大小的图标,并让底层平台选择最好的一个...
  • 您可能还想查看 Class#getResource 以从类路径上的 Jar 中加载嵌入的图像
  • @Mad 好主意。 setIcons(..) 虽然也许我们应该用 any 图标对其进行排序,然后再继续担心分配多个图标(例如,如 File Browser GUI 中所示)。 ;)

标签: java swing icons jframe imageicon


【解决方案1】:
..new ImageIcon("path upto image"); 

框架图标通常是嵌入式资源,因此必须通过URL 而不是File(代表路径的String)访问。

【讨论】:

    【解决方案2】:

    有几件事会阻止它编译。第一:

    frm.setbounds(0,0,1000,800);
    

    你的“setbounds”应该有一个大写的B。通常,函数会被大小写,这样第一个单词的第一个字母是小写的,后面的单词是大写的。有关 setBounds 的文档,请参阅此链接:setBounds

    您的 ImageIcon 路径中存在第二个问题。很难说这是否来自您的代码,或者您是否为了示例而删除了路径,但 Andrew Thompson 已经充分解决了这个问题。

    【讨论】:

    • “由于 Andrew 给出的原因,您给出的示例无法编译。” new ImageIcon("path upto image"); 会按字面意思编译。虽然它不会在运行时将资源作为File(或URL)找到。 +1 用于发现小写的方法名称。
    • @Andrew Thompson。为了正确起见,我将对其进行编辑;感谢您的提醒。
    • 伟大的编辑。感谢您提醒我“很难说这是否来自您的代码,或者您是否为了示例而删除了路径”,我需要向 OP 留言。为了尽快获得更好的帮助,请发帖SSCCE
    • 亲爱的先生代码现在正在运行,但我想将图标的大小和形状从矩形更改为圆形
    【解决方案3】:

    我认为问题在于 imageicon 的声明。您应该做的不是获取直接路径,而是执行以下操作:

    ImageIcon im1= new ImageIcon("Toolkit.getDefaultToolkit(). getImage(getClass().getResource("path upto image"))");
    我对我所有的应用程序都这样做,并且每次都有效。

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2020-05-06
      • 2010-11-07
      • 2011-11-30
      相关资源
      最近更新 更多