2013-05-30 6 views
5

Ich habe eine RCP/SWT-Anwendung, in der ich versuche, eine Ansicht aus bestehenden Composites zu erstellen. Einer ist ein FillLayout-Verbund, der andere verwendet GridLayout.kann ich SWT GridLayout und FillLayout kombinieren

Ich würde gerne mit einer Ansicht enden, in der das GridLayout-Composite links von der FillLayout-Composite aufgereiht ist (denke vertikale Banner) und ist etwa 10 Prozent der Breite der gesamten Ansicht, mit den vorhandenen FillLayout Composite umfasst die anderen 90 Prozent.

Ich bin nicht sicher, ob es in SWT möglich ist, Layouts zu kombinieren, aber ich denke etwas wie ein GridLayout mit zwei Spalten. Spalte 1 würde das GridLayout-Widget und Spalte zwei das FillLayout-Komposit enthalten. Kann dies in SWT gemacht werden? Wenn ja, wie sieht das Code-mäßig aus?

Thanks-

Antwort

7

Starten Sie ein FormLayout zu Ihrem äußeren Verbund Einstellung. Legen Sie zwei weitere Composites hinein und stellen Sie ihre FormData Informationen so ein, dass sie wie gewünscht positioniert werden. Dann legen Sie die Layouts dieser beiden Composite fest (Gitter und Füllung, wie Sie gesagt haben).

Hier ist ein Code zum Starten. Es gibt ein Bild danach, was es produziert. Sie können auch Eclipse SWT Layouts anzeigen.

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

Sie können den folgenden Code als Ausgangspunkt verwenden:

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(); 
} 

Es sieht wie folgt aus:

enter image description here


Es ist im Grunde ein SashForm mit zwei Teile. Der linke Teil ist ein GridLayout mit drei Spalten und der rechte Teil ist ein GridLayout mit einer Spalte. Keine Notwendigkeit zu mischen Layout s.

Der Prozentsatz wird mit form.setWeights(new int[] {4, 1});