Как убрать белый из JButton Icon - PullRequest
1 голос
/ 09 февраля 2012

У меня есть этот крошечный флаг, который я использую для значка на JButton по умолчанию. Но когда я загружаю его, он сохраняет белый прямоугольник вокруг него, который отображается на синем фоне JButton (по крайней мере, для меня это цвет). Мне было интересно, как я удаляю этот белый цвет.

Tiny Flag

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Конечно, Сиддхартха Шанкар дал правильный ответ, и 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);
            }
        });
    }
}

Кстати - вы можете объединить мое предложение с предложением Сиддхартхи, используя ImageIO.write(), используя изображение, сформированное из этих махинаций.

3 голосов
/ 09 февраля 2012

Может быть, вы хотите показать только Значок и удалить остальные из JButton путем установки myButton.setContentAreaFilled (false) , для пример

...