编程语言
首页 > 编程语言> > java – jPanel无法正常工作的背景图片

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