java - 在 Java 6 和 Java 7 中使用透明窗口

标签 java swing transparency java-7 jdk6

我正在使用 Java 6 (1.6.0_24) 开发应用程序,它使用透明的 JFrame 来获得消失的动画。这是我的代码:

public static void slowDisappearWindowAction(Window source, int milisSlow, int milisFast) throws InterruptedException{
    float level = 1.0f;
    //slow effect -> 50%
    for(int i=0; i<8 ; i++){
        level=level-0.05f;
        AWTUtilities.setWindowOpacity(source,level);
        Thread.sleep(milisSlow);
    }
    //fast effect -> 0% 
    for(int i=0; i<8 ; i++){
        level=level-0.05f;
        AWTUtilities.setWindowOpacity(source,level);
        Thread.sleep(milisFast);
    }
    AWTUtilities.setWindowOpacity(source,0.1f);
}

它在我的机器上运行良好,但是当我在另一台安装了 Java 7 的 PC 上测试它时,出现了休闲错误:

 Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException:
 The frame is decorated
    at java.awt.Frame.setOpacity(Unknown Source)
    at java.awt.Window$1.setOpacity(Unknown Source)
    at com.sun.awt.AWTUtilities.setWindowOpacity(Unknown Source)
    at pl.design.bead.pattern.model.window.WindowHelper.slowDisappearWindowAction(WindowHelper.java:21)
    at pl.design.bead.pattern.forms.MainForm$ExitController.windowClosing(MainForm.java:123)
    at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
    at java.awt.Window.processWindowEvent(Unknown Source)
    at javax.swing.JFrame.processWindowEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

我认为这是因为在 Java 7 中我应该使用 Window.setOpacity(...) 而不是 AWTUtilities 方法。

可以在 Java 6 应用程序中使用透明度,该应用程序将在 Java 7 上运行吗?

最佳答案

参见 How to Create Translucent and Shaped Windows .. 它提到了“每像素”半透明性,您可以利用它来制作带有 java 7 的窗口,该窗口具有 java 6 中不再可用的半透明窗口的外观和感觉。所以基本上你必须编写代码来适应两者,或者你可以使用适用于两者的“统一半透明”。

Gradient Translucent Window

关于java - 在 Java 6 和 Java 7 中使用透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535990/

相关文章:

java - 我需要帮助找出我的代码出了什么问题

java - 如何使用 Spring security 保护包含的页面

Java-R 桥 "JRI"错误 : R is already initialized

java - 如何在图片上添加按钮?

java - JTextPane 不换行?

java - 执行程序时不出现JLabel

java - 使用 JRadioButtons 切换类似界面

css - 添加带有图像的悬停效果(wordpress)

c# - C#中如何判断一个控件是否允许透明?

windows - 使用 Qt 显示半透明/不规则形状的窗口