【问题标题】:ImageIcons not displayed - JAVAImageIcons 不显示 - JAVA
【发布时间】:2012-11-02 15:26:46
【问题描述】:

我的问题是背景图像覆盖了我在 JPanel 中使用的所有 ImageIcon。例如,在这段代码 sn-p 中,我试图将 setIcon 设置为我在面板中拥有的标签之一。但是背景图像覆盖了它。我怎样才能解决这个问题?我是在paint方法之外还是在它内部使用label.setIcon()都没有关系。

public void paint(Graphics g) {
        super.paint(g);     
        g.drawImage(backgroundImage, 0, 0, this);
            label1.setIcon(iconImage);

}

提前致谢!

【问题讨论】:

  • 覆盖的方法是paintComponent(),而不是paint()。不应在paintComponent() 方法中设置图标。并在调用super.paintComponent() 之前尝试绘制图像,以便在您的背景图像上进行“正常”绘制。 (虽然没有经过测试,这就是为什么我不将此作为答案发布)

标签: java swing paint drawimage imageicon


【解决方案1】:
  1. 将基本面板的布局设置为BorderLayout
  2. 将JLabel 添加到基本窗格,将其图标设置为背景图像
  3. 将布局设置为 JLabel 为您所需要的任何内容
  4. 将其余组件添加到此标签

【讨论】:

    【解决方案2】:

    尝试将 label.seticon 放在被覆盖的方法之外。 参考:

    How to set JFrame or JPanel Background Image in Eclipse Helios

    您可以将其实现为;

     public void paintComponent(Graphics g) {
     g.drawImage(img, 0, 0, null);
     }
    

    或

    public void paint(Graphics g) { 
    if (img!=null) g.drawImage(img, 0, 0, null); 
    super.paint(g); 
    } 
    

    【讨论】:

    • 您必须遵守油漆链。如果不调用 super.paint,您就违反了本合同。绘制方法做了很多重要的工作(例如绘制子组件、双缓冲(在 JComponents 的情况下)和不透明度),你永远不应该避免调用它们的超级实现 - 恕我直言
    • 知道了!谢谢@MadProgrammer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2013-03-29
    • 2013-06-21
    • 2013-08-26
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多