Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 无法在透明JFrame上创建不透明的JPanel_Java_Swing_Jframe_Jpanel_Transparent - Fatal编程技术网

Java 无法在透明JFrame上创建不透明的JPanel

Java 无法在透明JFrame上创建不透明的JPanel,java,swing,jframe,jpanel,transparent,Java,Swing,Jframe,Jpanel,Transparent,我正在做一个项目,我想让屏幕变成半透明(想想谷歌Picasa或Facebook照片查看器的风格),然后在上面放置一个完全不透明的JPanel。我在网上找到了很多不同的解决方案,但我还没能让它们按我想要的方式工作。我试着按照这里的指示去做 () 最接近的,因为它似乎显示了我想要的效果。然而,它仍然不起作用 以下是我目前的代码: package test; import java.awt.AlphaComposite; import java.awt.BorderLayout; import ja

我正在做一个项目,我想让屏幕变成半透明(想想谷歌Picasa或Facebook照片查看器的风格),然后在上面放置一个完全不透明的JPanel。我在网上找到了很多不同的解决方案,但我还没能让它们按我想要的方式工作。我试着按照这里的指示去做

()

最接近的,因为它似乎显示了我想要的效果。然而,它仍然不起作用

以下是我目前的代码:

package test;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TransTest {
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {             
            BGBase base = new BGBase();
            base.setVisible(true);
        }
    });
}

static class BGBase extends JFrame {
BGPanel transparent = new BGPanel();

BGBase() {
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    setTitle("Transparent Frame");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(d);
//      setUndecorated(true);
    setBackground(new Color(0, 255, 0, 0));
    getContentPane().setBackground(Color.BLACK);
//      setLayout(new BorderLayout());

    //Something needs to go here?
}
}

static class BGPanel extends JPanel {
BGPanel() {
    setOpaque(false);
}

@Override
protected void paintComponent(Graphics g) {

    // Allow super to paint
    super.paintComponent(g);

    // Apply our own painting effect
    Graphics2D g2d = (Graphics2D) g.create();
    // 50% transparent Alpha
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));

    g2d.setColor(getBackground());
    g2d.fill(getBounds());

    g2d.dispose();
}
}
}
非常感谢

//setBackground(new Color(0, 255, 0, 0));
//getContentPane().setBackground(Color.BLACK);
我想让屏幕变成半透明的

您正在为alpha值指定0,这意味着它是完全透明的。此外,您不需要更改内容窗格的背景

只需指定具有透明度的颜色或边框。比如:

setBackground(new Color(255, 255, 255, 128));
然后在其上放置一个完全不透明的JPanel

然后就不需要定制面板了,因为默认情况下JPanel是不透明的。唯一需要担心的是使用适当的布局管理器,以便面板在框架中正确显示。当然,您实际上必须将面板添加到框架中。

更改

setOpaque(false);

否则您的paintComponent方法(在BGPanel类中)将根本不会被调用

希望这有帮助

setOpaque(true);