要做swing套件的JButton透明背景有幾種方式,像是利用html-tag的background背景來設定、或是使用JLabel來e承載Image然後add至JButton裡等,不過使用JLabel的方式需要做些技巧才會有透明背景的效果出來。
使用html-tag的方式需要實際存在硬碟裡的圖檔,所以需要在使用前先Resize一份存到硬碟裡,而JLabel的方式則可直接Resize存在記憶體使用,使用的時機及優缺點都需要考量。
如果只是想單純在JButton裡加入圖片,那直接使用function setIcon會比較方便。
註:以下所有範例圖,均只有一個按鈕,會分成外框及內框,圖片需使用支援透明背景及去好背的圖,如png或gif。
下圖是setText使用html-tag設定body的background,會自動延展背景,所以如果只想出現一張背景圖時,圖的長寛與按鈕就需要控制好。能控制的範圍為內框裡,外框部份就不會延展背景圖了。
底下這張圖是調整好長寬的圖
package yku; import java.awt.Frame; import javax.swing.JButton; import java.awt.BorderLayout; public class HtmlBackground extends Frame { private static final long serialVersionUID = 1L; private JButton jButton = null; /** * This is the default constructor */ public HtmlBackground() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(500, 600); this.setTitle("Html背景"); this.add(getJButton(), BorderLayout.CENTER); } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { yku.tool.Image tool = new yku.tool.Image("/han.png"); System.out.println(tool.getImagePath()); jButton = new JButton( "<html><body background='" + tool.getImagePath() + "'><table >" + "<tr valign='middle' >" + "<td align='center' height='194' width='259'>" + "<font style='color:red'>背景是圖喔</font>" + "</td>" + "</tr>" + "</table>" + "</body>" + "</html>"); } return jButton; } public static void main(String args[]) { (new HtmlBackground()).setVisible(true); } }