这个问题被问了很多,但到处都没有答案。通过扩展 JPanel 并覆盖paintComponent,我可以让 JFrame 很好地显示背景图像,如下所示:
class BackgroundPanel extends JPanel {
private ImageIcon imageIcon;
public BackgroundPanel() {
this.imageIcon = Icons.getIcon("foo");
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageIcon.getImage(), 0,0,imageIcon.getIconWidth(),imageIcon.getIconHeight(),this);
}
}
但是现在,您如何在该背景之上添加一个组件?我去的时候
JFrame w = new JFrame() ;
Container cp = w.getContentPane();
cp.setLayout(null);
BackgroundPanel bg = new BackgroundPanel();
cp.add(bg);
JPanel b = new JPanel();
b.setSize(new Dimension(30, 40));
b.setBackground(Color.red);
cp.add(b);
w.pack()
w.setVisible(true)
它显示红色小方块(或任何其他组件)而不是背景,但是当我删除时cp.setLayout(null);
,背景会显示,但不会显示我的其他组件。我猜这与 null LayoutManager 没有调用paintComponent 有关,但我一点也不熟悉 LayoutManagers 的工作原理(这是一个大学项目,作业特别说明不要使用 LayoutManager) .
当我制作图像时,背景必须显示为空(因此,透明(??)),红色方块出现,因此背景可能实际上位于我的其他组件之上。
有没有人有任何想法?
谢谢