Java 如何使JFrame背景图像透明?

Java 如何使JFrame背景图像透明?,java,swing,graphics,jframe,jpanel,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(

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

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);
例如。
  • 绘制背景图像
  • 背景图像隐藏所有GUI设计组件

  • 你为什么一直在谈论透明度?只有在组件的“顶部”绘制图像时,才需要考虑透明度

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

    这与透明度无关

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

    有关示例,请参见


    你不能仅仅改变一个图像使其透明。您需要加载具有透明像素的图像

    我看到你改变了这一点,但代码实际上没有改变发生的任何事情-如何使图像透明?调用super first意味着你用图像覆盖父级绘制的任何内容,使其成为前景而不是背景。把这两行倒过来。@melnocholson不,没有。请参阅答案上的链接SSCCEs。如果图像覆盖了fame上的所有内容,那么您是做错了什么(比如不调用super.paintComponent)。看一看AffineTrnFormatio,但是请记住,图形上下文是一个共享的resourceWell,使用super.paintComponent仍然掩盖了一切。我不知道你说的最后一点是什么意思,对不起,对swing软件包还是很不熟悉。这是一个副本。希望这个解决方案有帮助…@KeybordPiano459:希望这可能会有所帮助!!