2011-01-14 90 views
2

我有一些图像(gif或png),其中一些透明部分在放入JLabel时显示为黑色。GIF/PNG图像的透明部分在JLabel中显示为黑色java

ClassLoader cl = this.getClass().getClassLoader(); 
    ImageIcon img = new ImageIcon(cl.getResource("resources/myPicture.png")); 
    label = new JLabel(img); 

我该如何解决这个问题?

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

感谢 大卫

+1

确定将JLabel过错,该图片是不是透明的,或者在背景不黑?据我了解,你的愿望应该适用于JLabel中的图像。 – 2011-01-14 17:50:43

+0

图片*是*透明的,例如在浏览器上正确显示。 – dm76 2011-01-14 17:55:59

+1

@ Hovercraft:我认为你的意思是“图片*是*透明的”。 – 2011-01-14 17:56:30

回答

10

发现罪魁祸首!

实际上画面是越来越被添加到一个JLabel和之前重新调整,我用BufferedImage.TYPE_INT_RGB代替BufferedImage.TYPE_INT_ARGB

我真的没有想到的是,重定标方法可以改变这种(愚蠢的我!),这就是为什么我没有在我加入到这个问题的代码显示它...

大卫

4

同样,你确定它的JLabel的错吗?当我试图做一个概念验证程序时,一切正常 - 看到JPanel的粉红色背景。例如,

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

您可能希望自己创建一个类似的计划,看是否和您的问题,然后张贴在这里。

相关问题