2010-05-30 178 views
3

这是我的代码,它确实发现图像,所以不是我关心的问题,我关心的是如何使图像成为面板的背景。我试图与图形工作,但我不工作,任何想法?请??JPanel背景图片

try { 
      java.net.URL imgURL = MAINWINDOW.class.getResource(imagen); 

      Image imgFondo = javax.imageio.ImageIO.read(imgURL); 
      if (imgFondo != null) { 
       Graphics grafica=null; 
       grafica.drawImage(imgFondo, 0, 0, this); 
       panel.paintComponents(grafica); 
      } else { 
      System.err.println("Couldn't find file: " + imagen); 
      } 

     } catch... 

回答

2

这里的代码有错误。您在取消引用前将您的grafica设置为null该行。这肯定会抛出一个NullPointerException。您应该使用传递给将用于绘画的方法的方法,而不是声明自己的Graphics对象。要在Swing做到这一点,你应该实现paintComponent方法来绘制你的形象,这样的事情:

public void paintComponent(Graphics grafica) { 
    grafica.drawImage(imgFondo, 0, 0, this); 
    } 

注意,你不想做长时间运行的任务,如在在图像文件从磁盘读取画线。上面的例子假设你已经加载了imgFondo并且存储了它,以便可以通过paintComponent方法访问它。

+0

谢谢,这是否意味着我必须重写该方法?或者只是在我的课堂上实现它? – 2010-05-30 19:12:30

+0

如果你实现它,你将覆盖super的方法。 – akf 2010-05-30 21:33:18

+0

'null); //这里不需要ImageObserver更好的做法*不推定*如何使用类。 – 2015-01-14 23:47:28

0

如果您只是要以原始大小绘制图像,那么您只需将图像添加到JLabel,然后通过设置其布局管理器将该标签作为容器使用。

您唯一需要做自定义绘画的时间是如果您想缩放或平铺背景图像或做一些其他奇特的绘画。

有关两种方法的更多信息,请参见Background Panel

另外,请查看Swing教程Custom Painting中的部分。

+0

谢谢!这些链接非常有用。我还有一个问题,我知道如何将图像放在标签上,但是如何使该标签位于所有其他组件之下?在我的应用程序中,我创建了动态和静态组件。 – 2010-05-30 19:14:01

+0

我不明白这个问题。我给你一个如何在“背景面板”链接中执行此操作的示例。我给了你4行代码,告诉你如何使标签像JPanel一样行为,以便你可以使用它作为框架的内容窗格。如果您需要更多帮助发布您的SSCCE:http://sscce.org – camickr 2010-05-31 01:01:27