自定义JLabel图标

时间:2011-01-31 02:25:37

标签: java swing user-interface jlabel imageicon

我想在我的GUI上使用java JLabel和自定义大小的Icon。像这样:

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

我使用此代码更改原始图标的大小:

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

但在调整图像大小并使用此代码后,结果就是这个! :

enter image description here

如何在JLabel上获得所需的图像?

的问候, sajad

1 个答案:

答案 0 :(得分:4)

问题在于,当您创建缩放图像时,您使用BufferedImage.TYPE_INT_RGB作为新图像,透明度仅使用TYPE_INT_RGB呈现为黑色。

为了保持透明度,您需要将其替换为BufferedImage.TYPE_INT_ARGB,因为您需要一个alpha组件。

然而,在imageIcon的图像上调用Image.getScaledInstance将返回已经使用alpha分量的缩放图像,并且您可以传递提示提示以使用缩放图像的质量进行播放与getScaledImage函数基本相同,但麻烦较少。