GIF/PNG图像的透明部分在JLabel java中以黑色显示

GIF/PNG图像的透明部分在JLabel java中以黑色显示,java,swing,transparency,jlabel,Java,Swing,Transparency,Jlabel,我有一个带有透明部分的图像(gif或png),当放在一个JLabel中时,这些部分显示为黑色 ClassLoader cl = this.getClass().getClassLoader(); ImageIcon img = new ImageIcon(cl.getResource("resources/myPicture.png")); label = new JLabel(img); 我如何解决这个问题 我不需要JLabel,也许有更好的方法直接在JPanel上正

我有一个带有透明部分的图像(gif或png),当放在一个JLabel中时,这些部分显示为黑色

    ClassLoader cl = this.getClass().getClassLoader();
    ImageIcon img = new ImageIcon(cl.getResource("resources/myPicture.png"));
    label = new JLabel(img);
我如何解决这个问题

我不需要JLabel,也许有更好的方法直接在JPanel上正确显示图像(即使用透明度)

谢谢
大卫

再说一遍,你确定这是JLabel的错吗?当我试着做一个概念验证程序时,一切都很好——背景是JPanel的粉红色。e、 g

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TransparentJLabel {
    private static final String IMAGE_PATH = "http://duke.kenai.com/Oracle/OracleStratSmall.png";

    private static void createAndShowUI() {
        JPanel panel = new JPanel();
        panel.setBackground(Color.pink);

        URL imageUrl;
        try {
            imageUrl = new URL(IMAGE_PATH);
            BufferedImage image = ImageIO.read(imageUrl);
            ImageIcon icon = new ImageIcon(image);
            JLabel label = new JLabel(icon);
            panel.add(label);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        JFrame frame = new JFrame("TransparentJLabel");
        frame.getContentPane().add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }
}
您可能希望自己创建一个类似的程序,看看您的问题是否存在,并将其张贴在此处。

找到了罪魁祸首

实际上,图片在添加到JLabel之前会被重新缩放,为此,我使用了buffereImage.TYPE_INT_RGB而不是buffereImage.TYPE_INT_ARGB

我真的不认为重缩放方法可以改变这一点(愚蠢的我!),这就是为什么我没有在添加到问题的代码中显示它


David

您确定JLabel有问题、图片不透明或背景不是黑色吗?据我所知,你想要的东西应该适用于JLabel中的图像。例如,该图像是透明的,并在浏览器上正确显示。@Hovercraft:我想你的意思是“图片是透明的”。@Monkey:是的。你是对的,谢谢。谢谢,这帮助我找到了罪魁祸首(见我自己的答案)。谢谢你发布了解决方案,解决了这个谜!显然,我们中没有一个人能够弄明白这一点,除非您首先发布了一个SSCCE(类似于我上面的示例),以便为将来的问题牢记在心