2012-02-09 54 views
1

我有這個小標誌,我正在使用默認JButton上的圖標。但是當我加載時,它保留了它在JButton的藍色背景上顯示的白色框(至少對我來說這是顏色)。我想知道如何去除這種白色。如何從JButton圖標中刪除白色

Tiny Flag

+4

您需要創建一個「透明」圖標。 – eternaln00b 2012-02-09 04:36:19

+0

@SiddharthaShankar你應該將其作爲答案發布。 – 2012-02-09 06:29:25

+0

@AndrewThompson深夜,我很懶。 :)感謝您發佈全面而全面的答案。 *豎起大拇指* – eternaln00b 2012-02-09 12:27:09

回答

4

當然,悉達多尚卡爾提供了正確的答案,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(),利用這些把戲形成的圖像結合我與悉達多的建議。