Java:带有非透明组件的透明窗口?

Java:带有非透明组件的透明窗口?,java,swing,opacity,Java,Swing,Opacity,我刚刚遇到了一些实用程序(com.sun.awt.AWTUtilities),它们使您的JFrame真正透明。文档这个效果很好。即使在Linux中,桌面效果和不稳定的窗口都打开了。但是我还想在透明的JFrame上创建一个非透明组件 有谁知道,如果这是可能的,怎么做 以下是我使用的代码: import com.sun.awt.AWTUtilities; /* "this" is the JFrame */ this.setUndecorated(true); AWTUtilities.setWi

我刚刚遇到了一些实用程序(
com.sun.awt.AWTUtilities
),它们使您的JFrame真正透明。文档这个效果很好。即使在Linux中,桌面效果和不稳定的窗口都打开了。但是我还想在透明的JFrame上创建一个非透明组件

有谁知道,如果这是可能的,怎么做

以下是我使用的代码:

import com.sun.awt.AWTUtilities;

/* "this" is the JFrame */
this.setUndecorated(true);
AWTUtilities.setWindowOpaque(this, true);
AWTUtilities.setWindowOpacity(this, 0.5f);
AWTUtilities.setWindowShape(this, new RoundRectangle2D.Float(0f, 0f, (float) getWidth(), (float) getHeight(), 15f, 15f));
IIUC适用于整个
java.awt.Window
和内容,但您可以尝试下面和本文中所示的方法

JFrame f=newjframe();
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 立根背景(新颜色(0f、0f、0f、0.1f));
f、 未装饰的设置(真实);
f、 添加(新JLabel(“测试
1,2,3”); f、 包装(); f、 setLocationRelativeTo(空); f、 setVisible(真);
您要做的是
将windowopaque设置为
false
,并以低alpha(或0 alpha,如果您希望完全透明)绘制背景。组件仍将绘制为不透明。查看并查看每像素半透明性。

这在Linux中不起作用。。。在mac上,这是我问题的解决方案。。。Sad…@Martijn-courtaux:嗯,
awutilities
demo也没有:“请注意,底层平台可能不支持这些效果…”
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBackground(new Color(0f, 0f, 0f, 0.1f));
f.setUndecorated(true);
f.add(new JLabel("<html>Testing<br>1, 2, 3</html>"));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);