如何在绘制的背景上添加JPanel组件

时间:2013-05-01 18:15:53

标签: java swing jpanel paintcomponent

我希望能够将我的一个JPanel背景更改为我创建的图像,并且仍然在其上添加组件,但它们没有显示。

package userInterface;

import javax.swing.*;
import java.awt.*;

@SuppressWarnings("serial") public class BoardPanel extends JPanel {

  private Image img;

  public BoardPanel() {
    img = new ImageIcon("images/board.png").getImage();
    JButton button = new JButton("TEST ME");
    add(button);

    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }

}

2 个答案:

答案 0 :(得分:1)

如果您覆盖paintComponent(Graphics g),请务必先记得致电super.paintComponent(g)。 这样,通常被绘制的所有东西都会被绘制。

答案 1 :(得分:1)

JButtonJPanel不可见的原因是您要将JPanel的布局设置为null

setLayout(null);

将布局设置为null会使您明确设置组件的位置,这也是非常糟糕的做法。您应该删除该行,让layout的内部Swing正常工作。
作为旁注,我要强调的是,无论何时覆盖paintComponent方法,此方法的第一个陈述必须是super.paintComponent(g)