【问题标题】:E4 RCP Application Listen for Maximize or UnMaximizeE4 RCP 应用程序监听最大化或取消最大化
【发布时间】:2017-05-29 15:53:45
【问题描述】:

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

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

还尝试将 IPartListener 用于活动、可见等......这也发生在调整大小的地方,但没有在正确的时间触发以正确重绘,就像同样的问题。

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

  • 马夫

【问题讨论】:

  • 如果您认为需要重绘,您可以随时致电Control.redraw()
  • 如果您将TreeColumnLayoutColumnWeightData 一起使用,布局应该会自动处理所有大小调整。

标签: tree resize rcp e4 maximize


【解决方案1】:

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

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

值得注意的是,在我的情况下,我使用了一个“包装器”组合来将我的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多