在Swing中重新绘制时识别Graphics2D的脏区域

时间:2014-01-07 13:29:28

标签: java swing awt graphics2d

当使用Graphics2D对象时,找出目标缓冲区的哪个部分需要重绘的正确方法是什么,或者,如果需要重绘整个缓冲区,则目标缓冲区的维度是什么是

目标缓冲区可以是BufferedImage AWT 组件或打印时使用的虚拟设备。对于某些操作,例如用图案平铺背景,有必要知道哪些区域需要绘制,即使没有优化重新绘制的意图。

我尝试使用Graphics.getClipBounds(),但有时会返回null

我假设有一些方法Rectangle2D getInvaidRegion()Rectangle2D getDestinationBufferSize()

1 个答案:

答案 0 :(得分:1)

在Swing中,可以通过几种不同的方式重新绘制。

最简单的方法是覆盖paintComponent并只绘制所有内容,为您处理边框和子组件。

下一个最复杂的是覆盖paint。你现在需要处理边框和子组件。

最后你可以覆盖paintImmediately

http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paintImmediately%28int,%20int,%20int,%20int%29

这是肮脏的区域,但对你来说很少。