我想知道如何JFrame
在最新版本的Java中获得透明.
目前,您只能使用
<JFrame>.setOpacity();
Run Code Online (Sandbox Code Playgroud)
如果框架没有装饰.
我没有使用未装饰的框架,所以我想知道如何绕过这个限制并设置框架的不透明度,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)
...
Run Code Online (Sandbox Code Playgroud)
我也尝试(setBackground : Color)
使用Color
自定义Alpha值(new Color(int, int, int, Alpha)
)设置背景但它会抛出完全相同的错误.设置JPanel
这种方式的跨性别是行不通的,因为它仍然存在JFrame
,这是不透明的.
我找不到正确解决此问题的Stack Overflow上的其他答案.事实上,一些人认为这可以通过以下方式解决:
JFrame.setDefaultLookAndFeelDecorated(true);
Run Code Online (Sandbox Code Playgroud)
但他们误解了可能是指Java 7,因为我测试了它,结果是一样的.
我也尝试手动设置外观:
try {
for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch [...]
Run Code Online (Sandbox Code Playgroud)
将此与上面提出的解决方案相结合也行不通. …