[英]how to set JFrame background transparent but JPanel or JLabel Background opaque?
[英]Unable to create opaque JPanel on transparent JFrame
我正在一个项目中,我希望屏幕变为半透明(例如Google Picasa或Facebook照片查看器样式),然后在其上放置另一个完全不透明的JPanel。 我看了很多在线找到的不同解决方案,但是我无法让它们按照我想要的方式工作。 我试图按照这里给出的指示
( 如何将JFrame背景设置为透明,但JPanel或JLabel背景设置为不透明? )
最接近,因为它似乎显示出我想要的效果。 但是,它仍然不起作用。
到目前为止,这是我的代码:
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);
至
setOpaque(true);
否则根本不会调用您的paintComponent方法(在BGPanel类中)。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.