首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 6和Java 7中使用透明窗口

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

Stack Overflow用户
提问于 2012-07-18 15:07:26
回答 1查看 5.6K关注 0票数 6

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

代码语言:javascript
复制
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上测试它时,我遇到了fallowing错误:

代码语言:javascript
复制
 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 7上运行的Java 6应用程序中使用透明度吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-18 15:10:58

参见How to Create Translucent and Shaped Windows..它提到了一种“每像素”的半透明效果,你可以利用这种半透明效果在java7中创建一个窗口,它的外观和感觉与java6中的半透明窗口一样,现在已经不再可用。因此,基本上你必须编写代码来适应这两种情况,或者你可以使用“统一半透明”,这两种方式都适用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11535990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档