Вот пример .
Если вы создадите и запустите TranslucentWindow
, скажем, в среде IDE NetBeans 7.0, которая поддерживает jdk7, вы получите следующее исключение:
Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
at java.awt.Frame.setOpacity(Frame.java:960)
at main.TranslucentWindow.(TranslucentWindow.java:23)
at main.TranslucentWindow$1.run(TranslucentWindow.java:47)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 1 second)
Согласно этой трассировке стека, ошибочная строка будет tw.setOpacity (0.55f)
. Но, как указывает ошибка, если вы вызовете setUndecorated (true)
в кадре, то исключение не будет и будет создано полупрозрачное окно, хотя и без каких-либо украшений (что очень неудобно). Это нормально? Разве этот код не должен работать сразу "из коробки"? Я что-то не замечаю?
РЕДАКТИРОВАТЬ
Почему их полупрозрачное окно кажется украшенным, или это пользовательский рендеринг?
Что это ...
Что это должно быть ...