2013-05-30 19 views
5

Mevcut kompozitlerden bir görünüm oluşturmaya çalıştığım bir RCP/SWT uygulamasına sahibim. Biri bir FillLayout kompozit, diğeri GridLayout kullanıyor.SWT GridLayout ve FillLayout'u birleştirebilirim

GridLayout kompozitinin, FillLayout kompozitinin solunda (dikey dikey banner) olduğu ve tüm görünümün genişliğinin yaklaşık yüzde 10'unun mevcut olduğu bir görünümle sonlandırmak isterim. Diğer% 90'ı içeren FillLayout kompozit.

SWT'de mizanpajı birleştirmenin mümkün olup olmadığından emin değilim, ancak iki sütunlu GridLayout gibi bir şey düşünüyorum. Birinci sütun GridLayout widget'ını ve iki sütun FillLayout kompozitini içerecektir. Bu SWT'de yapılabilir mi? Eğer öyleyse, bu ne kod-akıllı gibi görünüyor?

Thanks-

cevap

7

Başlat sizin dış kompozit bir FormLayout ayar ile ayarlanır. İçinde diğer iki kompozit yerleştirin, FormData bilgilerini ayarlayarak bunları istediğiniz gibi konumlandırın. Sonra bu iki kompozitin düzenini ayarlayın (Grid ve Fill, dediğiniz gibi).

Başlamak için bazı kodlar. Ne ürettiğini gösterdikten sonra bir görüntü var. Ayrıca Eclipse'nın SWT Düzenleri görünümü kontrol edebilirsiniz.

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

Bir başlangıç ​​noktası olarak aşağıdaki kodu kullanabilirsiniz:

enter image description here


Temelde bir SashForm ile açıklanmıştır:

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

Bu şuna benzer iki parça. Sol kısım üç sütunlu bir GridLayout ve sağ kısmı tek sütun ile bir GridLayout olduğunu. Layout s'yi karıştırmaya gerek yok.

yüzde form.setWeights(new int[] {4, 1});