1

我在 Java 文档中阅读了与事件队列相关的声明,说“请注意,发布到 eventQueue 的事件可以合并”。这条线是什么意思?

4

1 回答 1

2

http://docs.oracle.com/javase/7/docs/api/java/awt/EventQueue.html

事后

public void postEvent(AWTEvent theEvent)

将 1.1 样式的事件发布到EventQueue. 如果队列中存在具有相同 ID 和事件源的现有事件, Component's coalesceEvents则会调用源方法。

参数: theEvent - 的实例java.awt.AWTEvent,或其子类 抛出: NullPointerException - 如果 theEvent 是null

http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html

合并事件

protected AWTEvent coalesceEvents(AWTEvent existingEvent,
                                  AWTEvent newEvent)

可能将发布的事件与现有事件合并。EventQueue.postEvent如果在队列中找到与要发布的事件具有相同 ID 的事件(两个事件都必须以该组件作为其源),则调用此方法。此方法要么返回替换现有事件的合并事件(然后丢弃新事件),要么null指示不应进行组合(将第二个事件添加到队列末尾)。任何一个事件参数都可以被修改和返回,因为另一个被丢弃,除非null被返回。

此实现coalesceEvents合并了两种事件类型:鼠标移动(和拖动)事件和绘制(和更新)事件。对于鼠标移动事件,总是返回最后一个事件,导致中间移动被丢弃。对于绘制事件,新事件在对等体中合并为一个复合体RepaintAreaAWTEvent总是返回新的。

参数: existingEvent - 事件已经在EventQueue newEvent- 被发布到 EventQueue 返回的事件:一个合并的事件,或者null表示没有合并

于 2013-07-24T20:15:38.167 回答