Related to this question: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?
with jdk1.6.0_26 I seem to be able to apply translucency to a JFrame, but not so with jre7:
NativeException: java.awt.IllegalComponentStateException: The frame is decorated
ex (jruby scripting java, works jdk1.6 not with jdk7 though):
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
So my question is "is it possible to have a translucent title bar in jdk7" (I would like a transparent window I'm creating to be draggable/resizable)
Java 7 introduced Window.setOpacity()
to do what the unofficial class AWTUtilities
did in Java 6.
Unfortunately it's documented not to work with decorated windows:
The following conditions must be met in order to set the opacity value less than
1.0f
:
- The
TRANSLUCENT
translucency must be supported by the underlying system- The window must be undecorated (see
Frame.setUndecorated(boolean)
andDialog.setUndecorated(boolean)
)- The window must not be in full-screen mode (see
GraphicsDevice.setFullScreenWindow(Window)
)
(Emphasis mine)
Fascinatingly, if you add
JFrame.setDefaultLookAndFeelDecorated(true);
Then it allows you to have a draggable, with title bar JFrame (it just uses the ugly java look and feel).
ref: Pass mouse events to applications behind from a Java UI
Now that is weird.
Also note that you can "fake" the old behavior using per pixel transparency, see http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html
so you can have the old behavior in both java 6 and 7, but you'd have to special case the code around it and do it one way for one, one way for the other, possibly...
来源:https://stackoverflow.com/questions/7353799/is-it-possible-to-have-a-translucent-windows-in-java-7-including-a-title-bar