如何获得透明的JFrame?

当我尝试运行以获得透明框架时,它显示exception。

我的代码是:

public class NewJFrame extends javax.swing.JFrame { public NewJFrame() { initComponents(); com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.05f); } 

例外情况是:

 Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated at java.awt.Frame.setOpacity(Frame.java:960) at java.awt.Window$1.setOpacity(Window.java:4032) at com.sun.awt.AWTUtilities.setWindowOpacity(AWTUtilities.java:174) at test.NewJFrame.(NewJFrame.java:28) at test.NewJFrame$2.run(NewJFrame.java:115) 

在调用setUndecorated(true)之前调用setUndecorated(true)

在Java 7+中,这种支持在核心API中提供(无需使用com.sun.*库)。 有关更多详细信息,请参见如何创建半透明和形状Windows 。 例如,您可以使用JFrame#setOpacity代替……

 this.setOpacity(0.05f); 

哦,尽管教程可能会提出建议,但我认为使装饰窗口透明的唯一方法是当窗口不使用操作系统提供的装饰时(并且使用外观和感觉提供装饰,这并非所有外观和感觉支持),但我可能是错的

作为备选; JavaFX本身支持透明窗口(参见本教程 )。 如果您刚开始使用Java GUI编程并且没有令人信服的理由使用Swing(即遗留应用程序),我建议您切换到JavaFX。 Swing处于维护模式,所有新东西都进入JavaFX。 我怀疑Swing将从Oracle获得一个新function。