Dem*_*urg 6 java swing transparency jdk6 java-7
我正在开发应用程序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);
}
Run Code Online (Sandbox Code Playgroud)
它在我的机器上工作正常,但是当我在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)
Run Code Online (Sandbox Code Playgroud)
我认为这是因为Java 7我应该使用Window.setOpacity(...)而不是AWTUtilities方法.
可以在Java 6应用程序中使用透明度,它将继续运行Java 7?
请参阅如何创建半透明和形状的窗口.. 它提到了“每像素”半透明度,您可以利用它来使用 java 7 制作一个窗口,该窗口具有 java 6 中半透明窗口的外观和感觉,而 java 6 中的半透明窗口已不再可用。所以基本上你必须编写代码来适应其中任何一个,或者你可以使用适用于两者的“均匀半透明”。

| 归档时间: |
|
| 查看次数: |
5559 次 |
| 最近记录: |