2011-12-15 153 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