我在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
。我尝试了一切,但我仍然无法显示面板。有人可以帮帮我吗?
答案 0 :(得分:4)
您无法在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"));
答案 1 :(得分:0)
“BackgroundImagePanel”解决方案以实际大小绘制图像。如果这是一项要求,那么您只需使用JLabel而不是创建自定义组件。
BackgroundPanel条目显示了如何执行此操作。它还提供了一个背景面板,其中包含更多自定义图像绘制解决方案,如果这是您需求的一部分,您可以对其进行缩放和平铺。