0

我希望能够将我的 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);
  }

}
4

2 回答 2

1

如果您覆盖paintComponent(Graphics g),请始终记住先调用super.paintComponent(g)。这样,通常会绘制的所有内容也将被绘制。

于 2013-05-01T18:18:14.693 回答
1

JButtonon the不可见的原因JPanel是您将布局设置JPanelnull

setLayout(null);

将布局设置为null使您可以显式设置组件的位置,这也是非常糟糕的做法。相反,您应该删除该行并让内部优雅layoutSwing完成其工作。
作为旁注,我要强调一点,每当您覆盖该paintComponent方法时,该方法的第一条语句必须是super.paintComponent(g)

于 2013-05-01T18:24:41.060 回答