Java 如何在Swing中仅重新绘制脏区域?
重新绘制脏区域是否只会提高性能Java 如何在Swing中仅重新绘制脏区域?,java,swing,Java,Swing,重新绘制脏区域是否只会提高性能 如果答案是肯定的,怎么做? 最初我使用repaint()调用paintComponent(图形);但是,最近我发现repaint()实际上是repaint(0,0,width,height),它每次都会重新绘制所有内容。如果我使用带有参数的repaint()来指定脏区域,它将以何种方式将这些数据传递给paintComponent(Graphics) 如果我使用带有参数的repaint()来指定脏区域,它将以何种方式将这些数据传递给paintComponent(Gr
JComponent
的“脏”区域,您需要使用。您可以通过以下方式获取当前的重新绘制管理器:
RepaintManager rm = RepaintManager.currentManager(component);
您甚至可以用自己的自定义版本替换repaitmanager
。其他详细信息可在的网站上找到。您不能直接使用重新绘制管理器绘制脏区域。重绘请求通过Swing自动转发到重绘管理器。每当您对组件发出重绘(…)请求时,指定区域将作为脏区域添加。然后,RepaitManager将为您合并这些脏区域,然后在组件上调用paint()。“重新绘制脏区域是否只会提高性能?”除非您对代码进行了优化以使用它。除非您检查当前的剪辑
边界,并且只更新其中出现的内容,否则它在性能改进方面几乎没有什么作用-因为在一天结束时,Java仍然需要将整个生成的位图绘制到屏幕上——也许可以看看其中有关于这个主题的讨论。我有一个绘制方法,可以大量调用Graphics.fill()。当鼠标靠近某些形状时,它们会发生变化,所以我天真地重新绘制了所有东西。它在4K大小时落后了很多。我通过重新绘制(边界)获得了更好的性能。无需减少fill()的调用数。