如何使JFrame背景图像透明?

时间:2013-06-10 03:50:51

标签: java swing graphics jframe jpanel

目前,我正在使用此代码为我的JFrame生成背景图片:

    BufferedImage myImg = ImageIO.read(myUrl);
    this.setContentPane(new ImagePanel(myImg));

    //ImagePanel class
    public class ImagePanel extends JComponent {
        private Image image;
        public ImagePanel(Image image) {
            this.image = image;
        }

        @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, null);
        }
    }

因此,图像会掩盖我在JFrame中拥有的所有内容。如何切换正在绘制的图像的透明度,以便在将图像设置为背景时仍能看到我的内容?

2 个答案:

答案 0 :(得分:4)

protected void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);

应该是:

protected void paintComponent(Graphics g) {
        super.paintComponent(g);  // paint the parent component!
        g.drawImage(image, 0, 0, this);

E.G。

  1. Answer to绘制背景图片。
  2. Answer to背景图片隐藏了所有GUI设计组件。

答案 1 :(得分:4)

为什么一直谈论透明度?如果要在组件“顶部”上绘制图像,则只关心透明度。

如果要在框架上显示背景图像,则将图像添加到面板并将面板添加到框架中。然后将其他组件添加到背景面板,以便这些组件显示在图像的顶部。

这与透明度无关。

背景面板通常是JPanel,而不是JComponent,因为面板设计用作容器。

有关示例,请参阅Background Panel

您不仅可以更改图像以使其透明。您需要加载带有透明像素的图像。