我希望能够将我的一个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);
}
}
答案 0 :(得分:1)
如果您覆盖paintComponent(Graphics g)
,请务必先记得致电super.paintComponent(g)
。
这样,通常被绘制的所有东西都会被绘制。
答案 1 :(得分:1)
JButton
上JPanel
不可见的原因是您要将JPanel
的布局设置为null
:
setLayout(null);
将布局设置为null
会使您明确设置组件的位置,这也是非常糟糕的做法。您应该删除该行,让layout
的内部Swing
正常工作。
作为旁注,我要强调的是,无论何时覆盖paintComponent
方法,此方法的第一个陈述必须是super.paintComponent(g)