2011-01-14 18 views
2

JLabelの中に入れたときに黒く表示される透明部分を持つ画像(gifまたはpng)があります。JLabelの中に黒で表示されたGIF/PNG画像の透明部分

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

この問題を回避するにはどうすればよいですか?

私はJLabelを必要としません。JPanelに直接画像を正しく表示するための良い方法がありますか?再び

おかげ デビッド

+1

絵が透明かということではないことを、あなたは必ずJLabelのに障害があることです背景は黒ではありませんか?私が物事を理解する限り、あなたが望むものは、JLabelのイメージのために働くべきです。 –

+0

画像は*透明で、例えばブラウザ上で正しく表示されます。 – dm76

+1

@Hovercraft:あなたは "絵*が透明である"ことを意味すると思います。 –

答えて

10

犯人を見つけました!

実際に絵がJLabelのに追加される前に再スケーリング取得され、そのために、私は私は本当に再スケーリング方法は、この(愚かな私を変えることができるとは思わなかったBufferedImage.TYPE_INT_RGB代わりのBufferedImage.TYPE_INT_ARGB

を使用私は質問に追加されたコードでそれを示さなかった理由!)、それは...

デビッドだ

+1

謎を解決するために、ソリューションを投稿してくれてありがとう!明らかに、あなたがSSCCEを(上記の私の例に似て)投稿していない限り、将来の問題に留意すべきことは私たちの誰もが理解できなかったでしょう –

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

同様のプログラムを自分で作成して、問題がどこにあるのかを確認してから、ここに投稿してください。

+0

ありがとう、それは私の犯人を見つけるのを助けた(私自身の答えを参照) – dm76

関連する問題