java - jPanel 的背景图像不工作

标签 java image swing jpanel embedded-resource

我是制作 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可能会经常被调用,并且通常会快速连续调用......

在调整组件大小时使图像缩放本身就是一个完整的问题,对于一些想法,您可以看看...

哦,而且,您应该避免直接从顶级容器扩展,例如 JFrame ,它们降低了组件的可重用性并将您锁定在单个容器中

关于java - jPanel 的背景图像不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837475/

相关文章:

java - 当我们显式设置容器的位置时, pack() 函数如何表现?

java - 当显示 "AlwaysOnTop"框架时,Mac 中的菜单项将被禁用

java - 如何将两个 JMenuItem 彼此相邻放置?

java - JSTL 与 JSP 小脚本

objective-c - Objective-C : Check if UIImage is filled with a single color

javascript - 从我的 Java Web 服务以 REST 响应 (xml) 发送图像

Java Deque(从子数组中查找唯一整数的最大数量。)

iphone - UITableViewCell 中的延迟加载图像

java - 如何在 JTabbedPane 及其组件之间添加 JSplitPane?

java - 将 JCheckBox 添加到 JTable 中