java.lang.Object javax.swing.RepaintManager
public class RepaintManager
此类管理重绘请求,以最大限度地降低重绘次数。例如,通过将多个请求折叠到对组件树成员的单个重绘中。
从 1.6 开始,RepaintManager
处理对 Swing 的顶层组件(JApplet
、JWindow
、JFrame
和 JDialog
)的重绘请求。在这些组件之一上对 repaint
的任何调用将生成适当的 addDirtyRegion
方法。
构造方法摘要 | |
---|---|
RepaintManager() 创建新的 RepaintManager 实例。 |
方法摘要 | |
---|---|
void |
addDirtyRegion(Applet applet, int x, int y, int w, int h) 将 applet 添加到需要重绘的 Component 列表。 |
void |
addDirtyRegion(JComponent c, int x, int y, int w, int h) 在应刷新的组件列表中添加组件。 |
void |
addDirtyRegion(Window window, int x, int y, int w, int h) 将 window 添加到需要重绘的 Component 列表。 |
void |
addInvalidComponent(JComponent invalidComponent) 按照布局需要标记组件,并将事件指派线程的 runnable 排入队列,该线程将验证组件的第一个 isValidateRoot() 祖先。 |
static RepaintManager |
currentManager(Component c) 在给定 Component 的情况下,返回调用线程的 RepaintManager。 |
static RepaintManager |
currentManager(JComponent c) 在给定 JComponent 的情况下,返回调用线程的 RepaintManager。 |
Rectangle |
getDirtyRegion(JComponent aComponent) 返回组件的当前脏区。 |
Dimension |
getDoubleBufferMaximumSize() 返回最大双缓冲区大小。 |
Image |
getOffscreenBuffer(Component c, int proposedWidth, int proposedHeight) 返回屏幕外缓冲区,它应用作带有组件 c 的双缓冲区。 |
Image |
getVolatileOffscreenBuffer(Component c, int proposedWidth, int proposedHeight) 返回可变屏幕外缓冲区,它应用作带有指定组件 c 的双缓冲区。 |
boolean |
isCompletelyDirty(JComponent aComponent) 在下一个 paintDirtyRegions() 中全部绘制 aComponent 时返回 true 的便捷方法。 |
boolean |
isDoubleBufferingEnabled() 如果此 RepaintManager 被双缓冲,则返回 true。 |
void |
markCompletelyClean(JComponent aComponent) 标记完全干净的组件。 |
void |
markCompletelyDirty(JComponent aComponent) 标记完全弄脏的组件。 |
void |
paintDirtyRegions() 绘制被标记为脏的所有组件。 |
void |
removeInvalidComponent(JComponent component) 从无效组件的列表移除组件。 |
static void |
setCurrentManager(RepaintManager aRepaintManager) 设置用于调用线程的 RepaintManager。 |
void |
setDoubleBufferingEnabled(boolean aFlag) 在此 RepaintManager 中,启用或禁用双缓冲。 |
void |
setDoubleBufferMaximumSize(Dimension d) 设置最大双缓冲区大小。 |
String |
toString() 返回一个显示并标记此对象属性的字符串。 |
void |
validateInvalidComponents() 验证被标记为无效的所有组件。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public RepaintManager()
方法详细信息 |
---|
public static RepaintManager currentManager(Component c)
c
- 在默认实现中未使用的 Component,但是重写版本可以使用它,以根据 Component 返回不同的 RepaintManager
public static RepaintManager currentManager(JComponent c)
注:此方法用于与 Swing 库早期版本的向后二进制兼容性。它只返回 currentManager(Component)
返回的结果。
c
- 未使用的 JComponent
public static void setCurrentManager(RepaintManager aRepaintManager)
aRepaintManager
- 要使用的 RepaintManager 对象
public void addInvalidComponent(JComponent invalidComponent)
public void removeInvalidComponent(JComponent component)
public void addDirtyRegion(JComponent c, int x, int y, int w, int h)
c
- 要重绘的组件,null 不执行任何操作。
x
- 要重绘区域的 X 坐标
y
- 要重绘区域的 Y 坐标
w
- 要重绘区域的宽度
h
- 要重绘区域的高度
JComponent.repaint(long, int, int, int, int)
public void addDirtyRegion(Window window, int x, int y, int w, int h)
window
添加到需要重绘的
Component
列表。
window
- 要重绘的窗口,null 不执行任何操作。
x
- 要重绘区域的 X 坐标
y
- 要重绘区域的 Y 坐标
w
- 要重绘区域的宽度
h
- 要重绘区域的高度
JFrame.repaint(long, int, int, int, int)
,
JWindow.repaint(long, int, int, int, int)
,
JDialog.repaint(long, int, int, int, int)
public void addDirtyRegion(Applet applet, int x, int y, int w, int h)
applet
添加到需要重绘的
Component
列表。
applet
- 要重绘的 Applet,null 不执行任何操作。
x
- 要重绘区域的 X 坐标
y
- 要重绘区域的 Y 坐标
w
- 要重绘区域的宽度
h
- 要重绘区域的高度
JApplet.repaint(long, int, int, int, int)
public Rectangle getDirtyRegion(JComponent aComponent)
public void markCompletelyDirty(JComponent aComponent)
public void markCompletelyClean(JComponent aComponent)
public boolean isCompletelyDirty(JComponent aComponent)
public void validateInvalidComponents()
public void paintDirtyRegions()
public String toString()
public Image getOffscreenBuffer(Component c, int proposedWidth, int proposedHeight)
c
的双缓冲区。默认情况下,每个 RepaintManager 都有一个双缓冲。该缓冲可能比
(proposedWidth,proposedHeight)
小,当最大双缓冲区的大小已设置为用于接收重绘管理器时,会发生这种情况。
public Image getVolatileOffscreenBuffer(Component c, int proposedWidth, int proposedHeight)
c
的双缓冲区。返回的图像将是 VolatileImage 的实例,如果 VolatileImage 对象无法实例化,则为 null。此缓冲区可能小于
(proposedWidth,proposedHeight)
。当最大双缓冲区的大小已设置为用于接收重绘管理器时,会发生这种情况。
VolatileImage
public void setDoubleBufferMaximumSize(Dimension d)
public Dimension getDoubleBufferMaximumSize()
public void setDoubleBufferingEnabled(boolean aFlag)
aFlag
- 如果激活双缓冲,则为 true
isDoubleBufferingEnabled()
public boolean isDoubleBufferingEnabled()
false
,以避免 Swing 中不必要的缓冲。在不支持本机双缓冲的平台上,默认值为
true
。