2011-12-15 150 views
-4

我是使用SWT創建佈局的新手。這就是我要創建 enter image description hereSWT佈局創建

這是我嘗試迄今: enter image description here

代碼:

private void createContents(final Shell shell) { 
    shell.setLayout(new GridLayout(2,true)); 

    /// Side Panel 
    Composite sideComposite = new Composite(shell, SWT.NONE); 
    sideComposite.setLayout(new RowLayout(SWT.VERTICAL | SWT.BORDER)); 
    Label codeLabel = new Label(sideComposite, SWT.NONE); 
    codeLabel.setText("Folders"); 

    // Create list of folders 
    Composite foldersComposite = new Composite(sideComposite, SWT.NONE); 
    foldersComposite.setLayout(new GridLayout(2,true)); 
    createFoldersComposite(foldersComposite); 

    // Create tags 
    Composite tagsComposite = new Composite(sideComposite, SWT.NONE); 
    tagsComposite.setLayout(new RowLayout()); 
    createTagsComposte(tagsComposite); 

    /// .Side Panel 

    /// Main Panel 
    Composite mainComposite = new Composite(shell, SWT.NONE); 
    mainComposite.setLayout(new RowLayout(SWT.VERTICAL)); 

    // Create search field 
    Composite searchComposite = new Composite(mainComposite, SWT.NONE); 
    searchComposite.setLayout(new GridLayout(2,true)); 

    Label searchLabel = new Label(searchComposite, SWT.NONE); 
    searchLabel.setText("Search"); 
    GridData gridData = new GridData(); 
    gridData.horizontalSpan = 1; 
    searchLabel.setLayoutData(gridData); 

    Text searchText = new Text(mainComposite, SWT.BORDER | SWT.V_SCROLL); 
    searchLabel.setLayoutData(gridData); 

    // Create search result 
    Composite resultComposite = new Composite(mainComposite, SWT.BORDER); 
    resultComposite.setLayout(new GridLayout(2,true)); 
    createResultComposite(resultComposite); 

    // Code Review 
    Text codeText = new Text(mainComposite, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); 
    codeText.setSize(500, 500); 


    /// .Main Panel 
} 

問:我怎樣才能解決我現有的代碼有確切的佈局我想要 ?

+1

問題是什麼? – 2011-12-15 16:06:56

回答

1

將其分解爲單獨的小部件可能會有所幫助,而不是嘗試一次處理所有內容的單片控件。這允許您正確地確定每個單獨組件上的佈局,然後逐個構建它們以獲得所需的總體佈局。

這是你的代碼示例尤其明顯 - 你正在創建一個名爲CompositesearchComposite兩列GridLayout,你要添加searchLabel到該複合材料。但是,您將searchText添加到mainComposite,我認爲這不是您的意圖。

相反,我會創建一個SearchControl,其中包含LabelText的兩列GridLayoutText上的GridData應該grabExcessHorizontalSpace填充控件的其餘部分。

我建議你更熟悉GridLayoutGridData。不要害怕嘗試。例如,您總是將true傳遞給構造函數GridLayout,這會使列匹配寬度變大。雖然這是完全合理的,但它與您所勾畫的佈局不匹配,其中一些列比另一列寬。另外,我建議看看GridDataFactory。它將把所有的GridData擺弄成單線。

+0

「把它分解成單獨的小部件?」你的意思是我應該創建另一個功能? GridDataFactory真的很棒:) – nXqd 2011-12-16 04:46:31