java – jPanel无法正常工作的背景图片
作者:互联网
我是制作GUI的新手,所以我决定尝试使用windows构建器进行eclipse,虽然很棒,但我确实有些疑惑.我一直在搜索,但我找不到找到一个很好的方法来添加背景图像到我的“菜单”.例如我试过这个:
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: maintaining aspect ratio of JPanel background image
> Java: JPanel background not scaling
> Quality of Image after resize very low — Java
> Reading/Loading images
哦,而且,你应该避免直接从顶级容器扩展,比如JFrame,它们会降低组件的可重用性并将你锁定到一个容器中
标签:java,image,swing,jpanel,embedded-resource 来源: https://codeday.me/bug/20190918/1811313.html