小编典典
问题1:界面更改后应该使用哪个:重新绘制或无效?
如果由于调整大小,更改字体等原因导致布局不是最新的,则应调用invalidate。使组件无效,使该组件无效并且其上方的所有父项均标记为需要布置。在绘制之前,如果在验证步骤中未找到任何更改,则省略绘制步骤。
如果组件的某个部分正在更新(由图形的剪辑矩形定义,称为 “损坏”
区域),则应考虑调用repaint。可能发生损坏区域的原因之一是由于某些其他组件或应用程序而导致的一部分组件重叠。根据我的经验,如果在最里面的封闭组件上调用repaint()会更有效(即使用public
void repaint(int x, int y, int width, int height)而不是使用public void
repaint())。
Q2:什么时候应该调用它们?
Invalidate(): 将组件标记为无效-
表示其布局是否为“最新”:即调整了组件的大小,添加了边框,更改了字体等。您永远不需要调用invalidate(
),因为每次属性更改时,挥杆动作几乎都能为您带来帮助。
当控件中的多个区域需要重新绘制时,Invalidate将使整个窗口在一次通过中重新绘制,从而避免了由于冗余重新绘制而引起的闪烁。在实际重绘控件之前多次调用Invalidate不会对性能造成任何影响。
Repaint() :如果组件是轻量级组件,则此方法将导致尽快调用此组件的paint方法。否则,此方法将导致尽快调用此组件的update方法。
也有看Update方法。
注意: Swing处理“重绘”请求的方式与AWT稍有不同,尽管应用程序程序员的最终结果基本上是相同的-调用paint()。
有关在AWT和Swing中如何完成绘画的出色链接,请参见下面的链接:
希望这会有所帮助。
2020-09-21