2017-05-29 184 views
0

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

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

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

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

  • 马福
+0

你可以随时调用'Control.redraw()'如果你认为一个重绘是必需的。 –

+0

如果通过'ColumnWeightData'使用'TreeColumnLayout',布局应该自动处理所有的大小调整。 –

回答

0

太感谢您了格雷格 - 449!现在工作很好....

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

在我的情况中,我使用了一个“包装器”复合材料来放置我的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