2012-02-10 95 views
0

当重写Swing组件的paintComponent方法并让图形对象不在整个组件的整个表面上绘制时(例如,只需一个g2.rotate(0.3)就可以显示绘制的和未着色的部分),部件的未着色部分正从后缓冲器图像填充垃圾颜色。Java Swing双缓冲区问题

如果我禁用RepaintManager中的双缓冲区,垃圾不会出现,并且非绘制部分显示为透明,但由于所有重绘和无缓冲,所有内容看起来都像垃圾。

即使我使用paintComponent中的g2对象将alpha设置为50%,仍然可以通过透明度看到缓冲垃圾。

我试过禁用双缓冲的单个组件,但没有骰子那里。

这个问题记录其他地方,喜欢这里:http://www.java.net/node/689238

...但似乎没有要纠正这种缓冲器破坏......任何人有任何想法呢?

此外,在Windows系统上,将主题更改为“经典”将解决此问题...也许这是一个操作系统问题?

谢谢!

+2

为更好地帮助越早,请编辑您的帖子与http://sscce.org/展示您的问题 – mKorbel 2012-02-10 22:51:50

回答

1

你做了setOpaque(false)

+0

好,setOpaque(假)会阻止缓冲垃圾,但它也隐藏了所有的背景通常渲染组件。 – PAULUS 2012-02-10 22:48:17

+1

不完全了解真正的问题。也许'super.paintComponent(g)'。最后可能缺少不旋转。 – 2012-02-10 23:34:25

0

这似乎是一个与Windows Aero主题相关的问题,以及Windows如何处理其自己的透明度。经典或基本主题(或非Windows操作系统)更正此问题。谢谢您的帮助。

- 保罗