【问题标题】:Images and Panels图像和面板
【发布时间】:2009-10-10 23:10:30
【问题描述】:

Image 之上添加JPanel 时遇到问题。这就是我想要做的:

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。我尝试了一切,但仍然无法显示面板。有人可以帮帮我吗?

【问题讨论】:

  • setBackgroundcolor有错别字。
  • 无论如何,JPanel 上没有名为 setBackgroundColor 的方法 :-)

标签: java image swing jpanel


【解决方案1】:

您不能将组件放置在 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"));

【讨论】:

  • 呃,对不起,如果我的代码是这样的垃圾。我有一个更长的代码正在运行(不是最上面的那个)。但我真的需要将面板放在图像顶部,因为从那里我将放置摆动组件......简单地说,我想要一个图像作为我的背景,顶部有一个“不可见”面板,最后摆动组件。 :|
  • 好的,明白了。我已将答案编辑为更具描述性。
【解决方案2】:

“BackgroundImagePanel”解决方案以实际大小绘制图像。如果这是一个要求,那么您可以只使用 JLabel 而不是创建自定义组件。

BackgroundPanel 条目显示了如何执行此操作。它还提供了一个带有更多自定义图像绘制解决方案的背景面板,如果这是您的要求的一部分,它可以让您缩放和平铺图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2014-03-19
    • 2011-05-24
    相关资源
    最近更新 更多