2013-10-11 36 views
0

我嘗試創建具有3列但沒有間距的視圖。更重要的是我需要有中央的列,其寬度由容器的整體寬度決定(因此可以抓住多餘的水平空間)。沒有間距的SWT佈局允許給定小部件的水平填充

GridLayout允許我創建3箇中心填充容器的列寬,但是我不能在這個佈局中的單元格之間的間距等於零。另一方面,在FillLayout中,指定等於零非常容易,但不可能使中心列寬由容器寬度確定。

你能告訴我如何用SWT佈局實現我的目標嗎?

回答

7

您可以設置verticalSpacingGridLayout0horizontalSpacing刪除間距:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    GridLayout layout = new GridLayout(3, false); 
    layout.horizontalSpacing = 0; 
    layout.verticalSpacing = 0; 
    shell.setLayout(layout); 

    createContent(new Composite(shell, SWT.BORDER), false); 
    createContent(new Composite(shell, SWT.BORDER), true); 
    createContent(new Composite(shell, SWT.BORDER), false); 

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

private static void createContent(Composite parent, boolean hFill) 
{ 
    if (hFill) 
    { 
     parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     parent.setLayout(new GridLayout(3, true)); 
    } 
    else 
    { 
     parent.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, true)); 
     parent.setLayout(new GridLayout(1, true)); 
    } 

    for (int i = 0; i < 6; i++) 
    { 
     new Button(parent, SWT.PUSH).setText("Button " + i); 
    } 
} 

那是什麼樣子(注意邊界相鄰無間距):

enter image description here

+0

謝謝,你做了我的一天,實際上甚至是週末。我不知道爲什麼,但我無法實現這一目標。再次感謝。 – wojtek88