具有Windows外观的半透明窗口?

时间:2012-09-19 09:20:55

标签: java swing user-interface transparency look-and-feel

我正在使用JDK7的半透明窗口支持,并发现它在Windows外观方面效果不佳。

这是我的代码:

JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        JFrame frame = new JFrame("Translucent Window");
        frame.setOpacity(0.5F);
        frame.setSize(640, 360);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

此代码正确显示半透明窗口。但是,如果我设置Windows外观:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

抛出异常:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated

如果我用frame.setUndecorated(true)禁用框架装饰,它会再次起作用,但这不是我想要的,因为缺少标题栏。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

请参阅本教程,了解如何制作JFrame透明或半透明

http://blogofjavacrazy.blogspot.in/2007/03/transparent-window-in-java.html

我偶然发现了一个整洁的小黑客,而不是实际上是透明的,它需要一个截图并添加那个小部分作为背景。

请参阅此链接:

http://onjava.com/pub/a/onjava/excerpt/swinghks_hack41/index.html

答案 1 :(得分:0)

这真是太愚蠢了。在带有AWTUtilities的Java 6下,这很好用。

你会想读这个。

Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?