2012-10-15 38 views
2

我想顯示包含2 Tree Viewers和一個Table Viewer的視圖。
它看起來如下,如何在主複合材料上添加2種不同佈局的不同佈局?


TreeViewer1 | TreeViewer2

------------- ------------ TableViewer的


(對不起,我不能上傳圖片我機由於一些限制,但上面的控件必須填充視圖的整個區域)

爲了這個,我創建了一個mainComposite,將容納所有的控制和由具有RowLayoutSWT.VERTICAL風格。
後,我已創建的頂部複合材料,其將要舉辦TreeViewer 1和TreeViewer 2,並且其具有Grid layout 2列(其中每列將包含一個TreeViewer RESP)
後,我已創建的底複合材料,其將持有TableViewer,並且它又具有1列的網格佈局。

mainComposite包含頂部和底部複合材料。頂部和底部組合需要均勻分享mainComposites高度,並且這兩個組合需要獲取mainComposite的整個寬度。

當我運行該程序時,我的控件按照我想要的順序前進,但它們沒有獲取組合的整個寬度(即它們在左角)。
我試過使用不同類型的佈局,但沒有幫助。

我試過帖子 http://www.programcreek.com/2012/03/eclipse-rcp-tutorial-5-how-to-layout-your-view-gridlayout-example/
但是因爲我有表格查看器而沒有爲我工作,而不是文本。

任何幫助表示讚賞。

問候,
Mandar

+0

一些代碼片段將有助於解決您的問題:) –

回答

0

你可以得到,我認爲你正在尋找(兩棵樹以及使用所有可用空間的表)通過使用設置爲SWT.FILL對準一堆GridLayouts兩者grabExcess*Space參數設置爲true的行爲。

試試這個:

@Override 
public void createPartControl(Composite parent) { 
    Composite container = new Composite(parent, SWT.NONE); 
    GridLayout gl_container = new GridLayout(1, false); 
    gl_container.horizontalSpacing = 15; 
    container.setLayout(gl_container); 

    Composite mainComposite = new Composite(container, SWT.NONE); 
    mainComposite.setLayout(new GridLayout(1, false)); 
    mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    Composite treesComposite = new Composite(mainComposite, SWT.NONE); 
    treesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
    treesComposite.setLayout(new GridLayout(2, false)); 

    TreeViewer leftTreeViewer = new TreeViewer(treesComposite, SWT.BORDER); 
    Tree leftTree = leftTreeViewer.getTree(); 
    leftTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    TreeViewer rightTreeViewer = new TreeViewer(treesComposite, SWT.BORDER); 
    Tree rightTree = rightTreeViewer.getTree(); 
    rightTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    TableViewer bottomTableViewer = new TableViewer(mainComposite, SWT.BORDER | SWT.FULL_SELECTION); 
    bottomTable = bottomTableViewer.getTable(); 
    bottomTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
} 

或者,你可以嘗試使用FormLayouts

這裏我使用「分子/偏移量」方法指定事物的位置。如果您看到的數字如0/50/100,那麼這些數字實際上就是可用空間的百分比。較小的數字如5/-5是以這些百分比描述的位置的像素偏移量;它們在組件之間提供一個小的餘量。

@Override 
public void createPartControl(Composite parent) { 
    Composite container = new Composite(parent, SWT.NONE); 
    GridLayout gl_container = new GridLayout(1, false); 
    gl_container.horizontalSpacing = 15; 
    container.setLayout(gl_container); 

    Composite mainComposite = new Composite(container, SWT.NONE); 
    mainComposite.setLayout(new FormLayout()); 
    mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    Composite treesComposite = new Composite(mainComposite, SWT.NONE); 
    FormData fd_treesComposite = new FormData(); 
    fd_treesComposite.bottom = new FormAttachment(50); 
    fd_treesComposite.right = new FormAttachment(100); 
    fd_treesComposite.top = new FormAttachment(0); 
    fd_treesComposite.left = new FormAttachment(0); 
    treesComposite.setLayoutData(fd_treesComposite); 
    treesComposite.setLayout(new FormLayout()); 

    TreeViewer leftTreeViewer = new TreeViewer(treesComposite, SWT.BORDER); 
    Tree leftTree = leftTreeViewer.getTree(); 
    FormData fd_leftTree = new FormData(); 
    fd_leftTree.bottom = new FormAttachment(100); 
    fd_leftTree.right = new FormAttachment(50, -2); 
    fd_leftTree.top = new FormAttachment(0, 5); 
    fd_leftTree.left = new FormAttachment(0, 5); 
    leftTree.setLayoutData(fd_leftTree); 

    TreeViewer rightTreeViewer = new TreeViewer(treesComposite, SWT.BORDER); 
    Tree rightTree = rightTreeViewer.getTree(); 
    FormData fd_rightTree = new FormData(); 
    fd_rightTree.bottom = new FormAttachment(100); 
    fd_rightTree.right = new FormAttachment(100, -5); 
    fd_rightTree.top = new FormAttachment(0, 5); 
    fd_rightTree.left = new FormAttachment(50, 3); 
    rightTree.setLayoutData(fd_rightTree); 

    TableViewer bottomTableViewer = new TableViewer(mainComposite, SWT.BORDER | SWT.FULL_SELECTION); 
    bottomTable = bottomTableViewer.getTable(); 
    FormData fd_bottomTable = new FormData(); 
    fd_bottomTable.bottom = new FormAttachment(100, -5); 
    fd_bottomTable.right = new FormAttachment(100, -5); 
    fd_bottomTable.top = new FormAttachment(50, 5); 
    fd_bottomTable.left = new FormAttachment(0, 5); 
    bottomTable.setLayoutData(fd_bottomTable); 
} 
+0

您好stracka,非常感謝。這是我正在尋找的。 – Mandy

+0

Hello @stracka,我正面臨着這個方法的一個小問題。當我用這段代碼調用expandAll()或expandToLevel(4)時,樹區域會自動擴展。並隱藏桌面觀衆區域。如果我沒有調用這些方法,這種方法對我來說非常合適。 – Mandy

+0

我添加了一個使用'FormLayout'的替代方法;當你展開樹木時它可能會給你更好的結果。 – stracka

0

使用在所有複合材料FillLayout的。 Here是一個小例子,它是如何使用它的。重要的是設置SWT.VERTICAL/SWT.HORIZONTAL。