如何获得有关在 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_ALL
和 UIEvents.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
事件在创建所有设置了上下文的对象时触发 - 但它也可能在其他时间触发。
在 AddOn 中,我们可以通过以下方法获得有关应用程序启动完成的通知:
@Optional
@Inject
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE)
org.osgi.service.event.Event event)
我们能否收到有关应用 window 已打开的通知?我试着听 UIEvents.TrimmedWindow.TOPIC_ALL
和 UIEvents.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
事件在创建所有设置了上下文的对象时触发 - 但它也可能在其他时间触发。