2011-03-08 34 views
1

我将JWindow的背景设置为完全透明。然后,我在paint-Method中绘制了一个圆角的Rectangle(RGB:0,0,0,100),并向JWindows ContentPane添加了一个JLabel。但是当我尝试重新绘制JWindow来更新JLabel时,它不会删除旧的Rectangle和JLabel的旧值。所以结果是我的自定义工具提示框(它应该是什么)变得不那么透明,并且你无法读取JLabels内容,因为它覆盖了旧的内容。JLabel在透明的画矩形?

有什么办法可以解决这个问题吗?如果我不重绘,它不会变得不那么透明,但是当我重绘时,我的JLabel的新内容覆盖了旧内容,就像它一样。

回答

1

首先,您应该覆盖paintComponent而不是paint并致电super.paintComponent(g)。您应该让JWindow不透明,因为最后一层的组件会清除旧内容。如果所有图层都是透明的,则最终会出现屏幕垃圾。

参见painting with Swing。也许你真的想创建translucent windows

+0

是的,我想创建半透明窗口,但我认为它不适用于Mac OS 10.6.6。 – esanits

+0

JWindow没有'paintComponent(Graphics g)',但它有'paintComponents(Graphics g)'。但是当我重写它不会画任何东西? – esanits

+0

我认为内容窗格是一个'JPanel',因此您可以将内容涂料设置为您自己定制的'JPanel'并覆盖'paintComponent()'。问题'我如何在Mac OS上创建半透明窗口?'绝对值得问IMO。 –