如何从JButton Icon中删除白色

时间:2012-02-09 04:32:20

标签: java swing icons jbutton

我有一个小标志,我用于默认JButton上的图标。但是当我加载它时,它会保留在它周围的白色框,它出现在JButton的蓝色背景上(至少那是我的颜色)。我想知道如何删除这种白色。

Tiny Flag

2 个答案:

答案 0 :(得分:4)

当然,Siddhartha Shankar提供了正确的答案,mKorbel提出了一个好的(横向思维)替代方案,但我被迫发布这个仅仅因为'我们拥有技术'。 ;)

TransparentIcon

import java.awt.image.BufferedImage;
import java.awt.*;
import javax.swing.*;

import java.net.URL;
import javax.imageio.ImageIO;

class TransparentIcon {

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://i.stack.imgur.com/DD7gI.gif");
        final BufferedImage bi = ImageIO.read(url);

        final BufferedImage tr = new BufferedImage(
            bi.getWidth(),
            bi.getHeight(),
            BufferedImage.TYPE_INT_ARGB);

        Color cTrans = new Color(255,255,255,0);

        for (int x=0; x<bi.getWidth(); x++) {
            for (int y=0; y<bi.getHeight(); y++) {
                Color c = new Color( bi.getRGB(x,y) );
                Color cNew = (c.equals(Color.WHITE) ? cTrans : c);
                tr.setRGB(x,y,cNew.getRGB());
            }
        }

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel p = new JPanel(new GridLayout(1,0,5,5));
                p.add(new JButton(new ImageIcon(bi)));
                p.add(new JButton(new ImageIcon(tr)));

                JOptionPane.showMessageDialog(null, p);
            }
        });
    }
}

BTW - 您可以使用ImageIO.write(),使用这些恶作剧形成的图像,将我的建议与悉达多的建议结合起来。

答案 1 :(得分:3)

也许您只想显示Icon,并通过JButton设置myButton.setContentAreaFilled(false)example删除其余内容,{{3}}