![](/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.