如何获得有关在 e4 中打开或创建的 window 的通知

How to get notification about window opened or created in e4

在 AddOn 中,我们可以通过以下方法获得有关应用程序启动完成的通知:

    @Optional
    @Inject
    public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE)
                           org.osgi.service.event.Event event)

我们能否收到有关应用 window 已打开的通知?我试着听 UIEvents.TrimmedWindow.TOPIC_ALLUIEvents.Window.TOPIC_ALL 但没有任何反应...

创建插件时,主应用程序 window 已经创建,因此您可以使用 EModelService.

找到它

UIEvents.UIElement.TOPIC_TOBERENDERED 事件将在通过调用 MUIElement.setToBeRendered(显示或隐藏)呈现所有 UI 对象时告诉您这些对象:

@Inject
@Optional
void event(@UIEventTopic(UIEvents.UIElement.TOPIC_TOBERENDERED) Event event)
{
  if (event == null)
    return;

  // The UI element
  Object element = event.getProperty(UIEvents.EventTags.ELEMENT);

  // Rendered or hidden value
  Boolean toBeRendered = (Boolean)event.getProperty(UIEvents.EventTags.NEW_VALUE);

但是,对于不调用 setToBeRendered

的动态生成的对象,不会生成此事件

UIEvents.Context.TOPIC_CONTEXT 事件在创建所有设置了上下文的对象时触发 - 但它也可能在其他时间触发。