我是制作 GUI 的新手,所以我决定尝试使用 Eclipse 的 Windows 构建器,虽然很棒,但我确实有一些疑问。我一直在寻找,但我找不到找到将背景图像添加到我的“菜单”的好方法。例如我尝试过这个:
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("/imgs/rotom.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 个按钮,但我怀疑它们在这里是否重要。我添加的代码不应该覆盖 jPanel 的 PaintComponent() 方法并在其中绘制图像吗?
菜单的类位于我的项目中的一个包中,图像位于同一项目中的 imgs 包中。
预先非常感谢。
如果您对调整背景图像大小或应用任何效果不感兴趣,一个简单的方法是使用JLabel
...
BufferedImage bg = ImageIO.read(Menu.class.getResource("/imgs/rotom.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 背景不缩放
- 调整大小后图像质量非常低 - Java
- 读取/加载图像
哦,而且,您应该避免直接从顶级容器扩展,例如JFrame
,它们降低了组件的可重用性并将您锁定在单个容器中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)