【问题标题】:Is it possible to have a translucent windows in java 7 including a title bar?java 7中是否可以有一个包含标题栏的半透明窗口?
【发布时间】:2011-09-08 20:05:29
【问题描述】:

与这个问题有关: 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):

需要'java' 类 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 结尾 结尾 MouseDraw.go

所以我的问题是“jdk7 中是否可以有一个半透明的标题栏”(我希望我正在创建的透明窗口可以拖动/调整大小)

【问题讨论】:

    标签: java swing jframe java-7 translucency


    【解决方案1】:

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

    不幸的是,它被证明不能使用装饰过的窗户:

    要设置不透明度值小于1.0f,必须满足以下条件:

    (强调我的)

    【讨论】:

    • @kleopatra:但这就是您在使用非官方 API 时注册的内容:AWTUtilities 未在 Java SE 中定义,新方法不会破坏与任何先前定义的公共方法的兼容性。
    • 从技术上讲,你是对的,从技术上讲,我也没有:而是使用了 AWTUtilitiesWrapper,它是准功能的半官方预览版(并且被宣传为相当安全 ;-)
    • 从已经过时的教程来看,这看起来(疯狂的猜测)对于装饰窗户中一些狂野或不那么狂野的副作用来说是一个相当晚的紧急刹车(再见淡出;-)跨度>
    • 所以我有一个 java 7 程序,它使用半透明的装饰窗口(它适用于 ubuntu)。然后在 Windows 上运行相同的程序不起作用。解释那个。
    • @JoelBoulet:我真的不知道你期待什么。我认为您应该将此作为问题发布,并提供更多信息。
    【解决方案2】:

    令人着迷的是,如果你添加

    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 中使用旧的行为,但是您必须对围绕它的代码进行特殊处理,并以一种方式对一种方式进行操作,一种方式对另一种方式进行,可能...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多