2017-05-29 89 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