我希望了解如何在最新版本的Java中获取一个透明的
如果窗口框架没有装饰,我对它没有用处,因此我想知道如何绕过此限制并将框架的不透明度设置为
我已阅读此处的文档:http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html。该代码仅适用于Java 6,不再运行。错误如上所述。
我还尝试使用自定义Alpha值的Color(new Color(int,int,int,Alpha))设置背景(setBackground:Color),但是它抛出了完全相同的错误。用这种方式设置JPanel的透明度不起作用,因为它仍然在不透明的JFrame上方。
我在Stack Overflow上找不到其他正确解决此问题的答案。实际上,有些人建议可以通过以下方式解决:
但是他们可能误解了,可能是指Java 7版本,我已经测试过了,结果完全一样。
我还尝试手动设置外观:
JFrame
。目前,您只能使用<JFrame>.setOpacity();
如果窗口框架没有装饰,我对它没有用处,因此我想知道如何绕过此限制并将框架的不透明度设置为
0.5f
,同时保留标题栏、调整大小选项等。我已阅读此处的文档:http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html。该代码仅适用于Java 6,不再运行。错误如上所述。
Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
at java.awt.Frame.setOpacity(Frame.java:960)
at TranslucentWindowDemo$1.run(TranslucentWindowDemo.java:53)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
...
我还尝试使用自定义Alpha值的Color(new Color(int,int,int,Alpha))设置背景(setBackground:Color),但是它抛出了完全相同的错误。用这种方式设置JPanel的透明度不起作用,因为它仍然在不透明的JFrame上方。
我在Stack Overflow上找不到其他正确解决此问题的答案。实际上,有些人建议可以通过以下方式解决:
JFrame.setDefaultLookAndFeelDecorated(true);
但是他们可能误解了,可能是指Java 7版本,我已经测试过了,结果完全一样。
我还尝试手动设置外观:
try {
for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch [...]
将此与上述建议的解决方案相结合也没有起作用。
请参考我链接的示例(Oracle文档)中的代码以获得MCVE,因为那是我正在使用的代码。
有什么其他方法吗?
setUndecorated(true)
和可能的setDefaultLookAndFeelDecorated(false);
- Joop EggensetDefaultLookAndFeelDecorated(true);
。窗口仍然有装饰。 - Lukas RottersetOpacity
是在Java 7中引入的。在此之前,Java 6不支持透明度(至少使用此API)。Oracle教程中的代码在我使用Java 8(在Ubuntu上)时有效。 - Didier L