[英]How to repaint only dirty region in Swing?
重新绘制脏区只能提高性能吗?
如果答案是肯定的,怎么做? 最初我使用repaint()来调用paintComponent(Graphics); 但是,最近我意识到repaint()实际上是重绘(0,0,宽度,高度),每次重绘一切。 如果我使用带参数的repaint()指定脏区域,它会以什么方式将这些数据传递给paintComponent(Graphics)?
如果我使用带参数的repaint()指定脏区域,它会以什么方式将这些数据传递给paintComponent(Graphics)?
“剪辑边界”或Graphics对象将设置为指定的区域
1.重新粉刷脏区只会提高性能吗?
为什么? 你有绘画问题吗? 除非您有理由这样做,否则不要对代码进行微观优化。 代码将难以维护和调试。 您将添加额外的逻辑来确定需要重新绘制哪些区域。
此外,请记住,多个重绘请求会合并到一个请求中。 因此,如果您请求重新绘制组件的左上角并立即请求重新绘制底部/右侧,则这两个请求将合并到包含两个区域的区域,这意味着整个组件将被重新绘制。 所以你没有做任何额外的工作。
要重新绘制大型JComponent
“脏”区域,您需要使用RepaintManager
。 您可以使用以下命令获取当前的RepaintManager
:
RepaintManager rm = RepaintManager.currentManager(component);
您甚至可以用自己的自定义版本替换RepaintManager
。 其他详细信息可以在Oracle的网站上找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.