我在 Java 文档中阅读了与事件队列相关的声明,说“请注意,发布到 eventQueue 的事件可以合并”。这条线是什么意思?
1 回答
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
合并了两种事件类型:鼠标移动(和拖动)事件和绘制(和更新)事件。对于鼠标移动事件,总是返回最后一个事件,导致中间移动被丢弃。对于绘制事件,新事件在对等体中合并为一个复合体RepaintArea
。AWTEvent
总是返回新的。参数:
existingEvent
- 事件已经在EventQueue
newEvent
- 被发布到EventQueue
返回的事件:一个合并的事件,或者null
表示没有合并