Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JButton具有透明图标和非透明文本?_Java_Swing_Jbutton_Transparency - Fatal编程技术网

Java 如何使JButton具有透明图标和非透明文本?

Java 如何使JButton具有透明图标和非透明文本?,java,swing,jbutton,transparency,Java,Swing,Jbutton,Transparency,我需要制作一个带有图像图标和常规文本的JButton。这个问题不是重复的,因为我需要上传一个图像作为图标,并使其透明。我尝试使用重写的paintComponent()方法 但它所做的只是把图标和文本都画成透明的,而且按钮不能正常刷新。 是否有任何可能的解决办法 更新 我设置按钮的方式如下(item.getImage()返回字节数组): 只需先在图像上绘制透明度 Image im = ...; java.awt.Graphics2D g2 = (java.awt.Graphics2

我需要制作一个带有图像图标和常规文本的JButton。这个问题不是重复的,因为我需要上传一个图像作为图标,并使其透明。我尝试使用重写的paintComponent()方法

但它所做的只是把图标和文本都画成透明的,而且按钮不能正常刷新。 是否有任何可能的解决办法

更新

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


只需先在图像上绘制透明度

    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 = ...

我不确定我是否理解正确-是否应该在调用setIcon()方法之前添加此代码?如果我试着这么做,我得到的只是一个按钮都没有。是的,这是一个想法-在设置图标之前。由于您没有粘贴任何显示如何创建按钮的代码,因此我无法对您报告的问题发表评论。我已更新了显示按钮如何创建的添加后代码。你能对代码多加评论吗?menuItem是什么类的?
        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));
            }
    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 = ...