我JPanel
在Image
. 这就是我想要做的:
Image bgImage = loadImage(filename);
JPanel jp = new JPanel();
jp.setBounds(100,100,100,100);
jp.setOpaque(true);
jp.setBackgroudColor(Color.red);
bgImage.add(jp);
执行此操作后,我只看到bgImage
. 我尝试了一切,但仍然无法显示面板。有人可以帮助我吗?
您不能将组件放置在Image
. 您要做的是将 绘制Image
到摆动组件的背景上(如JPanel
)。所有的 swing 组件都有一个paint()
调用这三个方法的方法(可能不是这个顺序):paintComponent()
, paintChildren()
, paintBorder()
. 因此,您想要覆盖paintComponent()
在面板上绘制背景图像的方法。当它运行时,您的自定义方法将被调用,然后该paintChildren()
方法将被调用,这会将所有“子”组件绘制在背景图像的顶部:
class BackgroundImagePanel extends JPanel {
public void setBackgroundImage(Image backgroundImage) {
this.backgroundImage = backgroundImage;
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
graphics.drawImage(backgroundImage, 0, 0, this);
}
private Image backgroundImage;
}
BackgroundImagePanel panel = new BackgroundImagePanel();
panel.setBackgroundImage(image);
panel.add(new JTextField("Enter text here..."));
panel.add(new JButton("Press Me"));
“BackgroundImagePanel”解决方案以实际大小绘制图像。如果这是一个要求,那么您可以只使用 JLabel 而不是创建自定义组件。
BackgroundPanel条目显示了如何执行此操作。它还提供了一个带有更多自定义图像绘制解决方案的背景面板,如果这是您的要求的一部分,它将允许您缩放和平铺图像。