创建一个舍入的JFrame / ContentPane

时间:2009-06-05 06:56:07

标签: java swing border

我正在创建一个带圆角的登录窗口。一切都很好,请参阅图片,但我遇到了使JFrame / ContentPane透明化的挑战。每个角落都有白色区域(箭头所示),我似乎无法删除,因为我无法为JFrame或ContentPane将opague设置为false。

关于如何删除这些白色区域的任何想法 alt text

4 个答案:

答案 0 :(得分:2)

从Java 1.3开始,有一个技巧可以让部分透明的窗口或窗口淡入(我通常将它用于我的启动画面),或特殊的FX(如阴影):

  • 在打开窗口之前,以编程方式截取窗口所在区域的屏幕截图(使用java.awt.Robot.createScreenCapture())
  • 将屏幕截图设置为根容器的背景(带有自定义paintComponent()例程的JPanel)
  • 现在您可以添加各种透明组件,或在背景上绘制另一个半透明图像。

使用此技术创建具有半透明阴影的窗口的示例: http://www.eclipsezone.com/eclipse/forums/t17720.html

答案 1 :(得分:2)

对你没什么帮助,但Java7将支持透明和形状的窗口:More info here。这些已在Java 6u10中提供,但不是公开的,即,您需要使用不受支持的com.sun ...类,以后可能会更改并破坏您的程序。

答案 2 :(得分:1)

试试这个。它的工作:))

yourframe.setBackground(new Color(0, 0, 0, 180));
yourframe.setUndecorated(true);
yourframe.addComponentListener(new ComponentAdapter() {
               @Override
                public void componentResized(ComponentEvent e) {
                    setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 80, 80));
                }
            });

答案 3 :(得分:0)

JFrame无法透明,因为它是一个重量级组件。只有轻量级组件(如JWindow)才能变得透明。