2

目前,我正在使用此代码为我的 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 中的所有内容。如何切换正在绘制的图像的透明度,以便在将图像设置为背景时仍然可以看到我的内容?

4

2 回答 2

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);

例如

  1. 绘制背景图像的答案。
  2. 对背景图像的回答隐藏了所有 GUI 设计组件。
于 2013-06-10T03:52:50.520 回答
4

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

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

这与透明度无关。

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

有关示例,请参见背景面板。

您不能只更改图像以使其透明。您需要加载具有透明像素的图像。

于 2013-06-10T04:11:43.377 回答