繁体   English   中英

如何在Swing中仅重绘脏区?

[英]How to repaint only dirty region in Swing?

  1. 重新绘制脏区只能提高性能吗?

  2. 如果答案是肯定的,怎么做? 最初我使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM