我一直在寻找用户点击应用程序窗口右上角的Windows 7或Windows 10最大化按钮来最大化E4 RCP应用程序的时间。最终,我希望在调整TreeViewer布局大小时调整TreeColumns的大小。我在树上有一个监听器,它在一个treeViewer中监听树大小的变化 - 它使用一个ControlListener,使用controlResized(ControlEvent e)方法。如果我单击并拖动调整应用程序窗口的大小,这可以正常工作。但是当我点击最大化按钮时,布局会改变大小,而列则不会。我怀疑听众太晚了,在最大化/取消最大化之前重绘之前没有检测到调整大小。
还尝试使用带有Iconify和deIconify方法的Listener,它们在这里不起作用,因为它们处理Minimize和un-Minimize。
还尝试使用IPartListener进行活动,可见等......这也会在调整大小的地方发生,但不会在正确的时间触发,就像同样的问题一样正确地重绘。
我真正想要的是一个最大化屏幕,检查布局大小(我认为我在做什么)的解决方案,然后相应地计算列大小。但是,单击“最大化”或“未最大化”不会触发此操作,只能通过拖动和调整大小来成功触发。也许这只是我在这里失踪的事情。提前感谢您的建议。
答案 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