代码之家  ›  专栏  ›  技术社区  ›  Uri

在Swing中,是否有方法临时冻结JComponent包含层次结构的重绘?

  •  5
  • Uri  · 技术社区  · 15 年前

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

    我想我是想做一种本地化的双缓冲。

    2 回复  |  直到 15 年前
        1
  •  3
  •   CarlG    15 年前

    也, 以防万一 您这样做的原因是因为您正在对组件进行一系列的GUI更新,并且担心所有那些自动发布的repaints(),而不是re paint()。repaint()不会立即绘制,它会向AWT事件队列发送一个延迟的重绘事件,它将合并给定区域的多个重绘,以避免重复进行相同的绘制。

        2
  •  1
  •   Pete Kirkham    15 年前

    超越 paint(Graphics) 如果设置了标志,则不执行任何操作将阻止绘制;您还可以通过重写以绘制到图像来添加自己的双缓冲区。

    您可以使用该组件的 setDoubleBuffered(boolean) 方法,你不需要做任何其他事情,如果这是你所需要的。


    即使通过重写paint禁用顶级组件的绘制,但如果子组件正在接收事件,则不会停止绘制;可以用静态图像替换帧的内容(使用缓冲图像中的图形调用paint创建)。