如何获得透明的JFrame?

How to get transparent JFrame?

当我尝试 运行 获取透明框架时,它显示异常。

我的代码是:

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.setOpacity(Window.java:4032)
at com.sun.awt.AWTUtilities.setWindowOpacity(AWTUtilities.java:174)
at test.NewJFrame.<init>(NewJFrame.java:28)
at test.NewJFrame.run(NewJFrame.java:115)

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

在 Java 7+ 中,此支持在核心 API 中提供(无需使用 com.sun.* 库)。有关详细信息,请参阅 How to Create Translucent and Shaped Windows。例如,您可以使用 JFrame#setOpacity 代替...

this.setOpacity(0.05f);

哦,尽管教程可能会建议什么,但我相信使装饰 window 透明的唯一方法是 window 不使用 OS 提供的装饰(并使用外观提供的装饰,并非所有外观都支持),但我可能是错的

作为替代方案; JavaFX 原生支持透明 windows(参见示例 tutorial)。如果您刚刚开始使用 Java GUI 编程并且没有令人信服的理由使用 Swing(即旧版应用程序),我建议切换到 JavaFX。 Swing 处于维护模式,所有新内容都将进入 JavaFX。我怀疑 Swing 是否会从 Oracle 获得一个新特性。