在Swing中,有没有办法暂时冻结重新绘制JComponent包含层次结构?

时间:2009-09-15 18:06:39

标签: java performance swing

如果我在Swing面板中有一堆自定义JComponents,并且每个都可以包含许多其他JComponents,有没有办法在顶级组件上“冻结”重绘,然后解冻它们,触发重绘? / p>

我想我正在尝试进行本地化的双缓冲。

2 个答案:

答案 0 :(得分:3)

另外,以防万一你这样做的原因是因为你正在对组件进行一系列GUI更新,并担心所有这些都自动发布重绘(),不要。 repaint()不会立即绘制,它会将延迟重绘事件发布到AWT事件队列,这将为给定区域合并多个重绘,以避免反复进行相同的绘制。

答案 1 :(得分:1)

如果设置了标志,则覆盖paint(Graphics)不执行任何操作将阻止绘画发生;您也可以通过覆盖添加自己的双缓冲来绘制图像。

您可以使用该组件的setDoubleBuffered(boolean)方法在每个挥杆JComponent基础上启用双缓冲,如果您需要,则无需执行任何其他操作。


即使您通过覆盖绘制来禁用顶层组件的绘制,如果它们正在接收事件,它也不会阻止绘制子组件;你可以用静态图像替换框架的内容(通过使用缓冲图像中的图形调用绘图创建)。