Using a transparent window in both Java 6 and Java 7

I am developing an application in Java 6 (1.6.0_24) that uses a transparent JFrame to produce fading animations. Here is my code:

 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); } 

It works fine on my machine, but when I tested it on another PC with Java 7 installed, I got an error:

  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) 

I think this is because in Java 7 I have to use Window.setOpacity(...) instead of AWTUtilities methods.

Can transparency be used in a Java 6 application that will run on Java 7 ?

+6
source share
1 answer

See How to create transparent and molded windows . It mentions โ€œper pixelโ€ translucency, which you can use to create a window with java 7, which has the appearance of a translucent window from java 6, which is no longer available. So basically you would have to code to take this into account, or you could go with "uniform transparency" that works with both.

Gradient Translucent Window

+3
source

Source: https://habr.com/ru/post/920778/


All Articles