任何人都可以解释Java中的repaint()函数应该和不应该使用的时间吗?我听说当组件改变了它的外观时应该使用repaint(),但我注意到当你设置JLabel的文本时,你不需要使用repaint()。在这种情况下,这个JLabel改变了它的外观,你不需要使用repaint()。任何人都能解释一下,何时使用这个功能?
答案 0 :(得分:0)
首先,repaint
不是JLabel
的方法(虽然它继承了ofc),但是Component
。
repaint
只是重新绘制组件。是的,你可以在视觉上发生变化时使用它。
但是,如果您每次在UI中更改某些内容时都要求调用者也调用重绘,那么您的UI将会出现重新调用的问题。这不会使代码更清晰。
因此,(股票)组件如果状态改变,则总是自己重新调用。如果是JLabel
,请查看第341 - 344行:
if (text == null || oldValue == null || !text.equals(oldValue)) {
revalidate();
repaint();
}
因此,只要您更改文字,JLabel
就会自行更新。
这意味着只要您只使用现有组件,就可能永远不必调用重绘。但是,如果您编写自己的组件,则每次有人在组件上调用变异的方法时,您都需要调用重绘,以便以需要进行视觉更改的方式进行状态调整。
你可以说短暂连续的多个变化可以更好地放入批量操作中,这就是RepaintManager
在幕后所做的事情,它跟踪重绘请求并且仅在启动新的绘制过程时启动需要(并且可能将多个重绘请求合并为一个通道)。