Java 如何从JButton图标中删除白色

Java 如何从JButton图标中删除白色,java,swing,icons,jbutton,Java,Swing,Icons,Jbutton,我有一个很小的标志,我用它作为默认JButton上的图标。但当我加载它时,它会保留它周围的白色框,它会显示在JButton的蓝色背景上(至少这是我的颜色)。我想知道我是如何去除这种白色的 也许你只想按集合显示和删除其余部分,因为也许你只想按集合显示和删除其余部分,因为当然,悉达多·尚卡尔给出了正确的答案,而姆科贝尔提出了一个好的(横向思维)选择,但我不得不发表这篇文章,仅仅是因为“我们有技术” 导入java.awt.image.buffereImage; 导入java.awt.*; 导入jav

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


也许你只想按集合显示和删除其余部分,因为

也许你只想按集合显示和删除其余部分,因为

当然,悉达多·尚卡尔给出了正确的答案,而姆科贝尔提出了一个好的(横向思维)选择,但我不得不发表这篇文章,仅仅是因为“我们有技术”

导入java.awt.image.buffereImage;
导入java.awt.*;
导入javax.swing.*;
导入java.net.URL;
导入javax.imageio.imageio;
类透明{
公共静态void main(字符串[]args)引发异常{
URL=新URL(“http://i.stack.imgur.com/DD7gI.gif");
final BufferedImage bi=ImageIO.read(url);
最终BuffereImage tr=新的BuffereImage(
bi.getWidth(),
bi.getHeight(),
BuffereImage.TYPE_INT_ARGB);
颜色cTrans=新颜色(255255,0);

对于(int x=0;x当然,悉达多·尚卡尔提供了正确的答案,而姆科贝尔提出了一个好的(横向思维)替代方案,但我不得不发表这篇文章,因为“我们有技术”。)

导入java.awt.image.buffereImage;
导入java.awt.*;
导入javax.swing.*;
导入java.net.URL;
导入javax.imageio.imageio;
类透明{
公共静态void main(字符串[]args)引发异常{
URL=新URL(“http://i.stack.imgur.com/DD7gI.gif");
final BufferedImage bi=ImageIO.read(url);
最终BuffereImage tr=新的BuffereImage(
bi.getWidth(),
bi.getHeight(),
BuffereImage.TYPE_INT_ARGB);
颜色cTrans=新颜色(255255,0);

对于(int x=0;xy)您需要创建一个“透明”图标。@SiddharthaShankar您应该将其作为答案发布。@AndrewThompson夜深了,我很懒。:)感谢您发布了一个完整而全面的答案。竖起大拇指,您需要创建一个“透明”图标图标。@SiddharthaShankar你应该把它作为一个答案发布。@AndrewThompson时间已经很晚了,我很懒。:)谢谢你发布了一个完整而全面的答案。竖起大拇指
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);
            }
        });
    }
}