系统的主TabPanel切换窗口的时候能触发窗口的事件吗?

当Screen显示到系统的主TabPanel后,用户切换标签页时,在Screen里面怎么能在标签页选中后触发一个事件,试过onAfterShow、onBeforeShow都不触发了

试一下这个事件 WorkAreaTabChangedEvent ,这是一个标准的 SpringApplicationEvent

不大会用,能给个示例吗?这个事件只能获得选中的sheet,怎么和sheet里自己的Screen关联起来呢?

两种方式:

  • 试试 WebAppWorkArea.getCurrentWindowContainer() 方法
  • 自定义一个 com.haulmont.cuba.gui.events.UiEvent 类型的事件,比如:“TabChangedEvent”,然后在界面控制器中监听这个事件,监听的方法与标准的 SpringApplicationEvent 一样。

protected TabWindowContainer getCurrentWindowContainer()
是个受保护的方法,外面获得不了

我是这样获得的,麻烦看下对不对,这是一个TAB里还可能多个SCREEN么

Optional optional= ((WebAppWorkArea)event.getWorkArea()).getCurrentBreadcrumbs().stream().findFirst();

要不这样获取吧:

AppUI.getCurrent().getScreens().getOpenedScreens().getCurrentBreadcrumbs().stream().distinct().findFirst().get()

因为 CUBA 的界面是有父子关系的,比如从 browser 界面打开 editor 界面,这里 editor界面和 browser界面是在一个 tab中的。所以需要使用 getCurrentBreadcrumbs() 来获取当前tab中的界面。

哦,那获取第一个应该就是主窗体了,对吧

是的,动手试试会印象深刻 :muscle: