E4 RCP 应用程序侦听最大化或取消最大化

E4 RCP Application Listen for Maximize or UnMaximize

我一直在寻找何时通过用户单击应用程序右上角的 Windows 7 或 Windows 10 最大化按钮最大化我的 E4 RCP 应用程序window。最终,我想在调整 TreeViewer 布局大小时调整 TreeColumns 的大小。我在 TreeViewer 中的 Tree 上有一个侦听器,它侦听 Tree 大小的变化 - 这使用 controlResized(ControlEvent e) 方法使用 ControlListener。如果我单击并拖动调整应用程序 window 的大小,这就很好用了。但是,当我单击最大化按钮时,布局会改变大小,而列不会。我怀疑侦听器为时已晚,并且在重绘发生在最大化/取消最大化之前未检测到调整大小。

还尝试将 Listener 与 Iconify 和 deIconify 方法一起使用,它们在这里不起作用,因为它们处理最小化和取消最小化。

还尝试对 activity、可见等使用 IPartListener。这也发生在调整大小的地方,但没有像同样的问题那样在正确的时间触发以正确重绘。

我真正想要的是最大化屏幕的解决方案,检查布局的大小(这是我认为我正在做的)然后相应地计算列大小。然而,这不会通过单击最大化或取消最大化来触发,只有通过拖动和调整大小才能成功。也许这只是我在这里缺少的东西。预先感谢您的建议。

谢谢greg-449!现在工作很好....

在创建树的 class 中,我使用 TreeColumnLayout 并使用 ColumnWeightData 通过 TreeColumnLayout 创建列。 (必须删除所有其他先前编写的用于调整列大小的侦听器,因为它们发生冲突并阻止其正常工作。)

值得注意的是,在我的情况下,我使用 "wrapper" 组合来放置我的 CheckboxTreeViewer(可能并不总是必要的),如:

Composite wrapper = new Composite(parent, SWT.NONE);

new CheckboxTreeViewer(wrapper, SWT.H_SCROLL | SWT.V_SCROLL | SWT.CHECK | SWT.BORDER | SWT.FULL_SELECTION);

TreeColumnLayout tcLayout = new TreeColumnLayout();

wrapper.setLayout(tcLayout);

如前所述,我使用 TreeColumnLayout 创建树中的所有列,我在其中设置了 ColumnWeightData 的权重、最小大小和可调整大小的属性。

final TreeColumn column = viewerColumn.getColumn();
tcLayout.setColumnData(column, new ColumnWeightData(weight, minimumSize, resizable));

希望详细说明这对其他人有帮助...

此处有大量 TreeColumnLayout 和 ColumnWeightData 的其他示例:http://www.programcreek.com/java-api-examples/index.php?api=org.eclipse.jface.layout.TreeColumnLayout