2012-11-02 58 views
0

我的问题是背景图像覆盖了我在我的JPanel中使用的所有ImageIcons。例如,在这段代码片段中,我试图将setIcon设置为面板中的其中一个标签。但背景图像涵盖了它。我怎样才能解决这个问题?如果我在paint方法之外或其内部使用label.setIcon(),则无关紧要。ImageIcons not displayed - JAVA

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

} 

在此先感谢!

+2

重写的方法是'paintComponent()',而不是'paint()'。该图标不应该在'paintComponent()'方法中设置。并且在调用'super.paintComponent()'之前尝试绘制图像,以便在背景图像上创建“正常”绘画。 (虽然没有测试,这就是为什么我不把这作为答案) –

+0

或重写'paintIcon()' – mKorbel

回答

0

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

How to set JFrame or JPanel Background Image in Eclipse Helios

可以作为实现它;

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

OR

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

你需要尊重油漆链。通过不打电话super.paint您违反了这个合同。绘制方法做了很多重要的工作(例如绘制子组件,双缓冲(就JComponents而言)和不透明度),你绝不应该避免调用它们的超级实现 - 恕我直言 – MadProgrammer

+0

Got It!谢谢@MadProgrammer。 – Purnesh

1
  1. 设置你的基地小组来BorderLayout
  2. 布局添加JLabel在底座面板,它的图标设置为背景图片
  3. 设置布局如果JLabel要什么你需要
  4. 添加rema将组件粘贴到此标签