[Java]JButton按鈕透明背景

要做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,會自動延展背景,所以如果只想出現一張背景圖時,圖的長寛與按鈕就需要控制好。能控制的範圍為內框裡,外框部份就不會延展背景圖了。

HtmlButton1.png

底下這張圖是調整好長寬的圖

HtmlButton2.png

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);
    }
}

發表迴響