2011-01-31 10 views
3

私はGUI上でカスタムサイズのアイコンでjava JLabelを使用したいと思います。このように:カスタムJLabelアイコン

ImageIcon imageIcon = (ImageIcon) jLabel1.getIcon();// new ImageIcon("Play-Hot-icon.png"); 

    ImageIcon thumbnailIcon = new ImageIcon(getScaledImage(imageIcon.getImage(), 25 , 25)); 
    jLabel1.setIcon(thumbnailIcon); 

、ここでリサイズ画像

private Image getScaledImage(Image srcImg, int w, int h){ 

    BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = resizedImg.createGraphics(); 

    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 

    g2.drawImage(srcImg, 0, 0, w, h, null); 

    g2.dispose(); 
    return resizedImg; 
}  

が、画像をリサイズして使用した後のコードです:

http://i.stack.imgur.com/XVglU.png

私は、元のアイコンのサイズを変更するには、このコードを使用しましたこのコードは結果です! :私は私のJLabelの上の画像を希望していることができる方法

enter image description here

に関して、

+3

[Image.getScaledInstance]を使用しない理由はありますか(http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Image.html#getScaledInstance(int、%20int 、%20int))画像を拡大縮小するには? –

+0

ありがとうございます!この小さな言葉が問題を解決しました! – sajad

+0

私に尋ねるのが気にならないなら。私はJavaを多用してカスタムコンポーネントを構築しましたが、コーディングを正しい方法で行うためにカスタムJComponent内にあるすべての部品と部品は何ですか?私はたくさんのことを読んでいますが、このトピックには多くの異なる答えがあるようです。地上ゼロから始め、JLabelを構築して独自のカスタムプロパティを追加したいのであれば、どうやってそれをやっていくのでしょうか? –

答えて

4

問題は、あなたがスケーリングされた画像を作成するときに、あなたの新しいイメージのためのBufferedImage.TYPE_INT_RGBを使用することでsajad、そして透明性がちょうどTYPE_INT_RGBと黒としてレンダリングされます。

透明性を維持するには、アルファ成分が必要なので、それをBufferedImage.TYPE_INT_ARGBに置き換える必要があります。あなたのgetScaledImage機能と本質的に同じことをやって、imageIconの画像にImage.getScaledInstanceを呼び出すことが

は、アルファ成分ですでに、スケーリングされた画像を返します、そしてあなたは、スケーリングされた画像の品質で再生するためのヒントをレンダリング、それを渡すことができますしかし、面倒なことはありません。

関連する問題