简体   繁体   English

如何转换SWT事件? 为什么SWT notifyListeners方法需要事件类型参数?

[英]How to convert SWT events? Why does SWT notifyListeners method expects event type argument?

Why does org.eclipse.swt.widgets.Widget#notifyListeners(int, Event) method expects separate event type argument? 为什么org.eclipse.swt.widgets.Widget#notifyListeners(int, Event)方法需要单独的事件类型参数? Isn't it contained inside Event argument already? 它不是已经包含在Event参数中了吗? What if they do not coincide? 如果它们不一致,该怎么办?

May I resend the same event with another id? 我可以使用另一个ID重新发送同一事件吗?

Suppose I wish to send SWT.OpenDocument in response to SWT.MouseDoubleClick 假设我希望发送SWT.OpenDocument作为对SWT.MouseDoubleClick响应

public void handleEvent(Event event) {
    if (event.type == SWT.MouseDoubleClick) {

        notifyListeners(SWT.OpenDocument, event);

    }
}

If you look at the source of Widget#notifyListeners(int, Event) and follow the method calls to Widget#sendEvent(int, Event, boolean) You can see the following: 如果您查看Widget#notifyListeners(int, Event)并遵循对Widget#sendEvent(int, Event, boolean)的方法调用,则可以看到以下内容:

void sendEvent (int eventType, Event event, boolean send) {
    if (eventTable == null && !display.filters (eventType)) {
        return;
    }
    if (event == null) event = new Event ();
    event.type = eventType;
    event.display = display;
    event.widget = this;
    if (event.time == 0) {
        event.time = display.getLastEventTime ();
    }
    if (send) {
        sendEvent (event);
    } else {
        display.postEvent (event);
    }
}

As you can see, the Event is "filled" for you, so it's impossible to have interfering/contradictory event types. 如您所见, Event为您“填充”,因此不可能有干扰/矛盾的事件类型。

The event you specify in the method call of notifyListeners will be used in any case. 在任何情况下, notifyListeners将使用您在notifyListeners方法调用中指定的事件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM