2011-01-14 84 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(); 
      } 
     }); 
    } 
} 

您可能希望自己創建一個類似的計劃,看是否和您的問題,然後張貼在這裏。

相關問題