jPanel的背景图片无效

我是制作graphics用户界面的新手,所以我决定尝试一下用于eclipse的windows builder,虽然很好,但我确实有一些疑问。 我一直在寻找,但我看不到find一个好方法来添加一个背景图像到我的“菜单”。 例如,我试过这个:

public Menu() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(50, 50, 300, 250); //Dimensiones contentPane = new JPanel() { //Imagen de Fondo public void paintComponent(Graphics g) { Image img = Toolkit.getDefaultToolkit().getImage( Menu.class.getResource("http://img.dovov.comrotom.jpg")); g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); } }; 

并添加以下类:

  import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; 

但无济于事,窗口依旧暗淡的灰色,到目前为止,我的代码只是WindowsBuilder为你烹饪的标准加4个button,但我怀疑它们在这里很重要。 不应该我添加的代码重写jPanel的paintComponent()方法,并在其中绘制图像?

菜单的类位于我的项目中的一个包中,而且图像位于同一个项目中的imgs包内。

非常感谢。

一个简单的方法,如果你不想调整背景图像或应用任何效果的兴趣是使用JLabel

 BufferedImage bg = ImageIO.read(Menu.class.getResource("http://img.dovov.comrotom.jpg")); JLabel label = new JLabel(new ImageIcon(bg)); setContentPane(label); setLayout(...); 

这种方法存在局限性(超出缩放比例),因为标签的首选大小将始终是图像的大小,并且永远不会考虑其内容。 这是好的和坏的。

你似乎正在使用的另一种方法是使用专门的组件

 public class BackgroundPane extends JPanel { private BufferedImage img; public BackgroundPane(BufferedImage img) { this.img = img; } @Override public Dimension getPreferredSize() { return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(), img.getHeight()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img, 0, 0, this); } } 

您应该避免尝试执行paintComponent方法中的任何任务,这可能需要一些时间才能完成,因为paintComponent可能会经常调用,并且通常会快速连续地执行….

调整组件大小时调整图像尺寸是整个问题的一部分,对于一些想法,您可以看看…

  • Java:保持JPanel背景图像的纵横比
  • Java:JPanel背景不缩放
  • resize后的图像质量很低 – Java
  • 读取/加载图像

哦,而且,你应该避免直接从顶层容器(比如JFrame直接扩展,它们会降低组件的可重用性并将你locking到一个容器中