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

时间:2017-05-29 15:53:46

标签: tree resize rcp e4 maximize

我一直在寻找用户点击应用程序窗口右上角的Windows 7或Windows 10最大化按钮来最大化E4 RCP应用程序的时间。最终,我希望在调整TreeViewer布局大小时调整TreeColumns的大小。我在树上有一个监听器,它在一个treeViewer中监听树大小的变化 - 它使用一个ControlListener,使用controlResized(ControlEvent e)方法。如果我单击并拖动调整应用程序窗口的大小,这可以正常工作。但是当我点击最大化按钮时,布局会改变大小,而列则不会。我怀疑听众太晚了,在最大化/取消最大化之前重绘之前没有检测到调整大小。

还尝试使用带有Iconify和deIconify方法的Listener,它们在这里不起作用,因为它们处理Minimize和un-Minimize。

还尝试使用IPartListener进行活动,可见等......这也会在调整大小的地方发生,但不会在正确的时间触发,就像同样的问题一样正确地重绘。

我真正想要的是一个最大化屏幕,检查布局大小(我认为我在做什么)的解决方案,然后相应地计算列大小。但是,单击“最大化”或“未最大化”不会触发此操作,只能通过拖动和调整大小来成功触发。也许这只是我在这里失踪的事情。提前感谢您的建议。

  • 马福

1 个答案:

答案 0 :(得分:0)

非常感谢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