如何获得透明的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 获得一个新特性。
当我尝试 运行 获取透明框架时,它显示异常。
我的代码是:
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 获得一个新特性。