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到一个容器中