如何使用透明图标和非透明文本制作JButton?

时间:2015-11-13 12:55:09

标签: java swing jbutton transparency

我需要制作一个带有图像图标和常规文本的JButton。此问题与How to make JButton with transparent background and regular text?不重复,因为我需要将图片上传为图标并使其透明。我试图使用覆盖paintComponent()方法

    @Override
    public void paintComponent(java.awt.Graphics g) {
        java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
        super.paintComponent(g2);
    }

但它所做的只是画图标和文字都是透明的,按钮也无法正常刷新。 有没有可能的解决方法?

更新

我设置按钮的方式如下(item.getImage()返回字节数组):

        setFocusable(true);
        setFocusPainted(true);
        setVerticalTextPosition(SwingConstants.CENTER);
        setHorizontalTextPosition(SwingConstants.CENTER);

        if(item.getImage() != null) {
            int w = BUTTON_SIZE - 10;
            int h = BUTTON_SIZE - 10;

            if(menuItem.isShowImageOnly()) {
                setIcon(menuItem.getScaledImage(w, h));
            }
            else {
                w = 80;
                h = 40;

                setIcon(menuItem.getScaledImage(w, h));
            }

1 个答案:

答案 0 :(得分:2)

只需先在Image上绘制透明度

    Image im = ...;
    java.awt.Graphics2D g2 = (java.awt.Graphics2D) im.getGraphics();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
    g2.drawImage(0,0, im, null);
    g2.dispose();
    ImageIcon icon = ...