【问题标题】:ImageIcon doesnt show up on top left app windowImageIcon 不显示在左上角的应用程序窗口中
【发布时间】:2011-09-25 18:28:21
【问题描述】:

我有这个代码:

 public DesktopApplication1View(SingleFrameApplication app)
    {
        super(app);
        pbu.registriere(this);

        ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png");
        this.getFrame().setIconImage(icon.getImage());

        initComponents();

我想知道为什么图像图标没有显示在应用程序窗口的左上角。它仍然是 Java 杯咖啡标志。

有什么问题吗?

谢谢

【问题讨论】:

  • 是 icon.getImageLoadStatus() == MediaTracker.COMPLETE
  • 您的问题可能与以下内容重复:stackoverflow.com/questions/7194734/…
  • 不是真的,因为在这种情况下我与 JFrame 无关
  • 我试过了,我也没有,我不知道问题出在哪里,但有时看看这个框架的作者,也许会给我们答案:-)
  • this.getFrame() 正在返回 Frame 或 JFrame 的实例。您将您的问题描述为标题和标签中的摆动,您的框架是 JFrame 而不是 AWT 框架并不是一个不合理的假设。

标签: java swing imageicon


【解决方案1】:

一种可能的可能性是您的资源路径可能不正确。根据您的文件层次结构,以及您的类文件是否在 jar 中等,您可能需要在 res 之前的路径开头使用“/”,以使路径成为绝对路径而不是相对路径。教程:http://download.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

如果您相当有信心正确读取图像(一个很好的测试是在窗口内制作一个虚拟组件,看看您是否可以将图像加载到其中),您应该查看Frame/Top Level Window Tutorial ,尤其是关于窗户装饰的部分。特别是,您可能没有做的一件事(我无法从您的 sn-p 中看出)是您可能需要在创建框架之前设置 JFrame.setDefaultLookAndFeelDecorated(true); ......您将无法做到使用this.getFrame(),但需要在初始化代码的更早的地方做。

【讨论】:

  • 一切似乎都是正确的,包括资源路径,因为在另一个盒子上我在同一个文件夹(资源)上设置了一个图像,我使用了相同的写作
  • 您使用的是区分大小写的操作系统吗?我确实注意到您的图像文件名中有大写字母。
  • JFrame frame = new JFrame("FrameDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel emptyLabel = new JLabel(""); emptyLabel.setPreferredSize(新维度(175, 100)); frame.getContentPane().add(emptyLabel, BorderLayout.CENTER); frame.setIconImage(new ImageIcon("/resources/BilKa_Icon_32.png").getImage());我已经把它们放在课堂上,但弹出一个新窗口,但新窗口的图标仍然没有改变。
  • 你在新窗口教程中测试了演示项目吗?对你起作用吗?它适用于我的机器。如果它有效,则将问题缩小到代码中的某些内容,而窗口装饰在您的 OS/java 版本/等上不起作用。源代码链接自该教程,只需要创建包(并可选择添加 jpg)并编译/运行:download.oracle.com/javase/tutorial/displayCode.html?code=http:/…
【解决方案2】:

Mike K 是对的,ImageIcon 可以动态加载,并且图像在首次初始化时可以具有零大小。另请注意,在 Unix 和 JAR 中,名称区分大小写。

试试这个:

 try{
   ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png");
   MediaTracker mt=new MediaTracker(this);
   mt.addImage(icon.getImage(),0);
   mt.waitForAll();
   this.getFrame().setIconImage(icon.getImage());
 }catch(InterruptedException excp){}

--

抱歉,我已经编辑了 addImage - 它需要一个额外的参数 ID,可以是任何数字。 至于您的错误“没有这样的构造函数”,它告诉您需要将 Component 传递给构造函数。您的应用程序窗口是一个组件,因此您应该在此处将其作为参数传递。我使用了this,因为大多数人将此代码放在扩展FrameWindowJFrameclass 中。所以使用

MediaTracker mt=new MediaTracker(this.getFrame());

【讨论】:

  • 我收到此错误:构造函数 MediaTracker(DesktopApplication1View) 未定义。我还需要一个 mt.addImage 参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 2019-06-07
  • 2021-12-21
  • 1970-01-01
  • 2019-06-13
  • 2016-04-03
相关资源
最近更新 更多