是否可以在java 7中使用半透明窗口,包括标题栏?

时间:2011-09-08 20:05:29

标签: java swing jframe java-7 translucency

与此问题相关: 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中有一个半透明的标题栏”(我想要一个透明窗口,我正在创建可拖动/可调整大小)

2 个答案:

答案 0 :(得分:8)

Java 7引入Window.setOpacity()来执行非官方类AWTUtilities在Java 6中所做的事。

不幸的是,据说不能使用装饰窗口:

  

必须满足以下条件才能将不透明度值设置为小于1.0f

     

(强调我的)

答案 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中都有旧的行为,但是你需要特殊情况下围绕它的代码并以一种方式为另一种方式做,另一种方式可能......