Java Swing 双缓冲区问题

标签 java swing double buffer

当重写 Swing 组件的 PaintComponent 方法并且让图形对象不在组件的整个表面上绘制时(例如,仅使用 g2.rotate(0.3) 将显示已绘制和未绘制的部分) ,组件的未绘制部分将使用后台缓冲区图像中的垃圾颜色进行填充。

如果我从 RepaintManager 禁用双缓冲,则不会出现垃圾,并且未绘制的部分显示为透明,但由于所有重新绘制且没有缓冲,一切看起来都像垃圾。

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

我尝试在单个组件上禁用双缓冲,但也没有骰子。

此问题已在其他地方记录,例如:http://www.java.net/node/689238

...但似乎没有办法纠正这种缓冲区损坏...有人有什么想法吗?

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

谢谢!

最佳答案

你做了setOpaque(false)吗?

关于Java Swing 双缓冲区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235742/

相关文章:

java - 如何给 JTable 单元格边框(左、右、上、下)不同的颜色?

java - 如何近似 vector 旋转

java - 如何使用 Comparator.comparing() 将字符串与 double 进行比较?

double - 扩展的 double

java - BufferedReader 出现意外的 java.util.NoSuchElementException

java - 如何使用 DSL 为 ack/nack 和返回队列配置 amqp-outbound 适配器?

java - GUI 使用 JFrame 和 JPanel 绘制自定义形状

java - 从下一个类向 JFrame 添加组件

java - 在 Java 中处理多个时区

java - 需要澄清静态/动态类型和 Vtable