2013-05-30 75 views
5

我有一個RCP/SWT應用程序,我試圖從現有的複合材料中構建一個視圖。一個是FillLayout組合,另一個使用GridLayout。我可以結合SWT GridLayout和FillLayout

我想結束一個視圖,其中GridLayout組合排列在FillLayout組合的左邊(認爲是垂直橫幅),大約是整個視圖寬度的10%,現有的包含另外90%的FillLayout複合材料。

我不確定在SWT中是否可以合併佈局,但我想像有兩列的GridLayout。第一列包含GridLayout小部件,第二列包含FillLayout組合。這可以在SWT中完成嗎?如果是這樣,這看起來像代碼明智嗎?

Thanks-

回答

7

開始設置FormLayout你的外複合。在其中放置兩個其他複合材料,將其設置的FormData信息放置在適當的位置。然後設置這兩個複合材料的佈局(如您所說的,網格和填充)。

這裏有一些代碼開始。之後有一張圖片顯示它的產生。 您可能還會看看Eclipse的SWT Layouts視圖。

Shell shell = new Shell(); 

FillLayout fillLayout = new FillLayout(); 
fillLayout.marginHeight = 5; 
fillLayout.marginWidth = 5; 
shell.setLayout(fillLayout); 

Composite outer = new Composite(shell, SWT.BORDER); 
outer.setBackground(new Color(null, 207, 255, 206)); // Green 

FormLayout formLayout = new FormLayout(); 
formLayout.marginHeight = 5; 
formLayout.marginWidth = 5; 
formLayout.spacing = 5; 
outer.setLayout(formLayout); 

Composite innerLeft = new Composite(outer, SWT.BORDER); 
innerLeft.setLayout(new GridLayout()); 
innerLeft.setBackground(new Color(null, 232, 223, 255)); // Blue 

FormData fData = new FormData(); 
fData.top = new FormAttachment(0); 
fData.left = new FormAttachment(0); 
fData.right = new FormAttachment(10); // Locks on 10% of the view 
fData.bottom = new FormAttachment(100); 
innerLeft.setLayoutData(fData); 

Composite innerRight = new Composite(outer, SWT.BORDER); 
innerRight.setLayout(fillLayout); 
innerRight.setBackground(new Color(null, 255, 235, 223)); // Orange 

fData = new FormData(); 
fData.top = new FormAttachment(0); 
fData.left = new FormAttachment(innerLeft); 
fData.right = new FormAttachment(100); 
fData.bottom = new FormAttachment(100); 
innerRight.setLayoutData(fData); 

shell.open(); 

Code output

2

您可以使用下面的代碼爲出發點:

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 

    SashForm form = new SashForm(shell, SWT.HORIZONTAL); 
    form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    Composite left = new Composite(form, SWT.BORDER); 
    left.setLayout(new GridLayout(3, true)); 
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    for(int i = 0; i < 9; i++) 
    { 
     Button button = new Button(left, SWT.PUSH); 
     button.setText("Button " + i); 
     button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true)); 
    } 

    final Composite right = new Composite(form, SWT.BORDER); 
    right.setLayout(new GridLayout(1, true)); 
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    Button fillButton = new Button(right, SWT.PUSH); 
    fillButton.setText("Fill"); 
    fillButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    /* Set the width to 80% and 20% */ 
    form.setWeights(new int[] {4, 1}); 

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

它看起來像這樣:

enter image description here


這基本上是一個SashForm與兩部分。左邊部分是帶有三列的GridLayout,右邊部分是帶有一列的GridLayout。無需混合Layout s。

的比例被設定爲form.setWeights(new int[] {4, 1});