java - 有没有办法可以在不使用 JLabel 或覆盖 PaintComponent 的情况下将背景图像添加到 JPanel?

标签 java swing background jpanel

我想在不使用 JLabel 或覆盖 PaintComponent 的情况下向 JPanel 添加背景图像。

JPanel 没有 setIcon(ImageIcon)。我真的很想动态更改 JPanel 的背景图像,就像 JLabel 等其他组件中的 setIcon 一样。

最佳答案

"I want to add background image to JPanel without using JLabel or overriding paintComponent"

看起来有点牵强。你想做某事,但你没有按照应该做的方式去做。也许更好地理解如何实现这一点会让您改变主意。

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

正如 nIcE cOw 提到的,您可以使用 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 爵士的类(class) BackgroundPanel 。查看链接了解如何使用它。它与我描述的第一个选项基本上是相同的概念,只是好 100 倍,并且有更多好处。

关于java - 有没有办法可以在不使用 JLabel 或覆盖 PaintComponent 的情况下将背景图像添加到 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315398/

相关文章:

java - 如何去除 JInternalFrame 中的边框?

android - android widget 背景应该是九色补丁吗?应该有不同的 dpi 版本吗?

html - 侧导航背景缩小而内容不缩小

java - org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

java - Android 8.1 带通知 : Use of stream types is deprecated

java - JScrollPane 为空白,直到您滚动。

java - 为什么我的 JTable 在 OS X 上使用 VoiceOver 时总是报告为空?

java - 获取 csv 并比较行。数组列表? java

java - 如何在java中获得基于窗口的应用程序的控制

python - Paramiko - 在 "background"中运行命令