什么时候应该使用Java repaint()函数?

时间:2018-05-12 07:08:04

标签: java swing

任何人都可以解释Java中的repaint()函数应该和不应该使用的时间吗?我听说当组件改变了它的外观时应该使用repaint(),但我注意到当你设置JLabel的文本时,你不需要使用repaint()。在这种情况下,这个JLabel改变了它的外观,你不需要使用repaint()。任何人都能解释一下,何时使用这个功能?

1 个答案:

答案 0 :(得分:0)

首先,repaint不是JLabel的方法(虽然它继承了ofc),但是Component

repaint只是重新绘制组件。是的,你可以在视觉上发生变化时使用它。

但是,如果您每次在UI中更改某些内容时都要求调用者也调用重绘,那么您的UI将会出现重新调用的问题。这不会使代码更清晰。

因此,(股票)组件如果状态改变,则总是自己重新调用。如果是JLabel,请查看第341 - 344行:

if (text == null || oldValue == null || !text.equals(oldValue)) {
    revalidate();
    repaint();
}

因此,只要您更改文字,JLabel就会自行更新。

这意味着只要您只使用现有组件,就可能永远不必调用重绘。但是,如果您编写自己的组件,则每次有人在组件上调用变异的方法时,您都需要调用重绘,以便以需要进行视觉更改的方式进行状态调整。

你可以说短暂连续的多个变化可以更好地放入批量操作中,这就是RepaintManager在幕后所做的事情,它跟踪重绘请求并且仅在启动新的绘制过程时启动需要(并且可能将多个重绘请求合并为一个通道)。