繁体   English   中英

有没有一种方法可以在不使用JLabel或Overrideing paintComponent的情况下向JPanel添加背景图像?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM