2012-06-10 73 views
1

這是我的代碼和窗體的截圖。SWT佈局重定位窗體控件

我想要最上面的文本框取所有自由的水平空間。
enter image description here

![Display display = new Display();][1] 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout()); 

    Group group = new Group(shell, SWT.FILL); 
    group.setText("Group"); 
    group.setLayout(new GridLayout(4, false)); 
    group.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); 


    Label lb = new Label(group, SWT.NONE); 
    lb.setText("label"); 
    new Text(group, SWT.BORDER); 

    Button btn = new Button(group, SWT.CHECK); 
    Label lbbtn = new Label(group, SWT.NONE); 
    lbbtn.setText("check"); 


    Composite comp = new Composite(group, SWT.NONE); 
    comp.setLayout(new GridLayout(4, false)); 
    comp.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); 
    Label lb1 = new Label(comp, SWT.NONE); 
    lb1.setText("Text1"); 
    Text txt = new Text(comp, SWT.BORDER); 

    Label lb2 = new Label(comp, SWT.NONE); 
    lb2.setText("Text2"); 
    txt = new Text(comp, SWT.BORDER); 

    Label lb3 = new Label(comp, SWT.NONE); 
    lb3.setText("Text3"); 
    txt = new Text(comp, SWT.BORDER); 

    Label lb4 = new Label(comp, SWT.NONE); 
    lb4.setText("Text4"); 
    txt = new Text(comp, SWT.BORDER); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

回答

4

使用GridDatahorizontalSpan與值2爲Composite,和一個與GridDatahorizontalAlignmentFILL並用值trueText小窗口的grabExcessHorizontalSpace

我通常使用GridDataFactory創建GridData對象,我認爲代碼更清晰。

+0

這就是我需要的!小問題,爲什麼Label,text1和text2沒有水平對齊? – kenny

+0

「標籤」與「文本1」和「文本2」位於不同的容器中,因此它們具有不同的佈局管理器。爲了確保第一列在2個佈局管理器中具有相同的寬度,您可以在'GridData'中指定一個寬度。或者,您可以使用一個帶有6列的容器,第一個水平跨度爲3的文本,以及空白標籤填充右下角的空白區域。 – Baldrick

+0

您也可以使用WindowBuilder。 –