![](/img/trans.png)
[英]How to set the background in a JPanel without using the super call in paintComponent()
[英]Is there a ways I can add background image to JPanel without using JLabel or Overriding paintComponent?
我想在不使用JLabel或重写paintComponent的情况下将背景图像添加到JPanel。
JPanel没有setIcon(ImageIcon)。 我真的很想在其他组件(如JLabel)中动态更改JPanel的背景图像(如setIcon)。
“我想在不使用JLabel或重写paintComponent的情况下将背景图像添加到JPanel”
似乎有点舒展。 您想要做某事,但是不想按照原本应该做的方式去做。 也许对如何实现这一目标的更好理解会使您改变主意。
JPanel和重写paintComponent
有一个方法来setImage(Image image)
或者您可以使用ImageIcon
。 您可以设置用于绘制背景的图像。
public class BackgroundPanel extends JPanel {
private Image image;
public void setImage(Image image) {
this.image = image;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0 getWidth(), getHeight(), this);
}
}
调用setImage
传递图像时,由于调用repaint()
,它将动态更改图像
使用JLabel
正如nICEE所提到的,您可以将JLabel用作容器,并将所有组件添加到标签中。 请记住,JLabel是Container的子类。 可以将任何容器添加到其中。 请记住,JLabel没有布局管理器(与具有默认设置的JFrame和JPanel不同),因此您需要进行设置。 你可以简单地做
JLabel backgroundLabel = new JLabel();
backgroundLabel.setIcon(new ImageIcon("backgound.png"));
backgroundLabel.setLayout(new GridBagLayout());
backgroundLabel.add(new JButton("Hello World"));
那是完全合法的。
另一种选择
Rob Camick爵士BackgroundPanel
先生的一类。 查看链接以了解如何使用它。 它与我所描述的第一个选项基本上是相同的概念,仅比其他选项好100倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.