Eclipse SWT布局创建

Eclipse SWT布局创建,eclipse,swt,Eclipse,Swt,我对使用SWT创建布局非常陌生。这就是我要创造的 这是我迄今为止的尝试: 代码: private void createContents(final Shell shell) { shell.setLayout(new GridLayout(2,true)); /// Side Panel Composite sideComposite = new Composite(shell, SWT.NONE); sideComposite.setLayout(

我对使用SWT创建布局非常陌生。这就是我要创造的

这是我迄今为止的尝试:

代码:

   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
}

问题:如何修复现有代码以获得所需的精确布局?

将其分解为单独的小部件可能会有所帮助,而不是使用试图同时处理所有布局的单片控件。这允许您正确地确定每个单独组件上的布局,然后一次构建一块,以获得所需的总体布局

这在示例代码中尤其明显-您正在创建一个名为
searchComposite
Composite
,其中包含两列
GridLayout
,并将
searchLabel
添加到该组合中。但是您正在将
searchText
添加到
mainComposite
,我认为这不是您想要的

相反,我将创建一个
SearchControl
,它有两列
GridLayout
,其中包含
标签和
文本。
文本
上的
网格数据
抓取ExcessHorizontalSpace
以填充控件的其余部分


我建议大家更熟悉
GridLayout
GridData
。不要害怕实验。例如,您总是将
true
传递给
GridLayout
构造函数,这将使列宽匹配。虽然这是完全合理的,但它与您绘制的布局不匹配,因为有些柱比其他柱宽。此外,我建议查看
GridDataFactory
。它将把所有的
GridData
摆弄变成一行。

“将其分解为单独的小部件?”你的意思是我应该创建另一个函数吗?GridDataFactory真的很棒:)