Java:带有非透明组件的透明 Windows?

Posted

技术标签:

【中文标题】Java:带有非透明组件的透明 Windows?【英文标题】:Java: Transparent Windows with non-transparent components? 【发布时间】:2011-03-23 06:28:09 【问题描述】:

我刚刚遇到了实用程序 (com.sun.awt.AWTUtilities) 让您的 JFrame 真正透明。文档here。这很好用。即使在 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));

【问题讨论】:

【参考方案1】:

你想要做的是setWindowOpaquefalse 并用低 alpha 绘制背景(如果你想要完全透明,则为 0 alpha)。组件仍将被绘制为不透明的。查看this article 并查看每像素半透明度

【讨论】:

【参考方案2】:

IIUC,Translucent Windows 适用于整个java.awt.Window 和内容,但您可以尝试下面显示的方法以及此example。

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);

【讨论】:

这在 Linux 中不起作用...在 mac 上,这是我的问题的解决方案...悲伤... @Martijn Courteaux:嗯,AWTUtilities 演示也不支持:“请注意,底层平台可能不支持效果...”

以上是关于Java:带有非透明组件的透明 Windows?的主要内容,如果未能解决你的问题,请参考以下文章

透明控件(透明容器中的非透明控件)

带有非透明子视图的 iOS 8 透明视图

带有主题支持的透明复选框?

如何在非透明背景上创建透明文本

Windows窗体按钮背景透明

ImageMagick - 沿内部非透明对象边框分割透明度图像