当我尝试运行以获得透明框架时,它会显示异常。
我的代码是:
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.<init>(NewJFrame.java:28)
at test.NewJFrame$2.run(NewJFrame.java:115)
答案 0 :(得分:2)
在致电setUndecorated(true)
之前致电setWindowOpacity
。
在Java 7+中,核心API提供了这种支持(无需使用com.sun.*
库)。有关详细信息,请参阅How to Create Translucent and Shaped Windows。例如,您可以使用JFrame#setOpacity
代替......
this.setOpacity(0.05f);
哦,尽管教程可能会提出建议,但我认为使装饰窗口透明的唯一方法是当窗口不使用操作系统提供的装饰时(并且使用外观和感觉提供的装饰,这看起来并非所有并感到支持),但我可能是错的
答案 1 :(得分:0)
作为替代方案; JavaFX本身支持透明窗口(例如参见此tutorial)。如果您刚开始使用Java GUI编程并且没有令人信服的理由使用Swing(即遗留应用程序),我建议您切换到JavaFX。 Swing处于维护模式,所有新东西都进入JavaFX。我怀疑Swing将从Oracle获得一个新功能。