与此问题相关: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?
使用jdk1.6.0_26我似乎能够将半透明应用于JFrame,但jre7却不是这样:
NativeException:java.awt.IllegalComponentStateException:框架已装饰
ex(jruby脚本java,工作jdk1.6但不是jdk7):
require 'java' class MouseDraw def self.go java_import 'javax.swing.JFrame' java_import 'com.sun.awt.AWTUtilities' f = JFrame.new AWTUtilities.set_window_opacity(f, 0.5) f.set_size 200,200 f.show end end MouseDraw.go
所以我的问题是“是否有可能在jdk7中有一个半透明的标题栏”(我想要一个透明窗口,我正在创建可拖动/可调整大小)
答案 0 :(得分:8)
Java 7引入Window.setOpacity()
来执行非官方类AWTUtilities
在Java 6中所做的事。
不幸的是,据说不能使用装饰窗口:
必须满足以下条件才能将不透明度值设置为小于
1.0f
:
- 基础系统必须支持
TRANSLUCENT
半透明- 窗口必须未修饰(请参阅
Frame.setUndecorated(boolean)
和Dialog.setUndecorated(boolean)
)- 窗口不得处于全屏模式(请参阅
GraphicsDevice.setFullScreenWindow(Window)
)
(强调我的)
答案 1 :(得分:3)
有趣的是,如果你添加
JFrame.setDefaultLookAndFeelDecorated(true);
然后它允许你有一个可拖动的标题栏JFrame(它只是使用丑陋的java外观)。
参考:Pass mouse events to applications behind from a Java UI
现在这很奇怪。
另请注意,您可以使用每像素透明度“伪造”旧行为,请参阅http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html
所以你可以在java 6和7中都有旧的行为,但是你需要特殊情况下围绕它的代码并以一种方式为另一种方式做,另一种方式可能......