2010-05-27 21 views
5

içeriğini değiştirmek için bir düğmeyi tıklattıktan sonra swt kompozit yeniden çizim yapar SWT'de yeniyim. Üzerinde çalıştığım projede, üzerinde 3 çocuk kompozit bulunan ana bir kompozit var. Üst kompozit düğmelerden oluşur ve orta kompozit içeriği görüntülemek içindir ve alt kompozit diğer amaç içindir. Olması gereken şey, üstteki bileşikteki bir düğmeyi tıkladığımda, ortadaki bileşikteki içerik değişikliğini tetiklemesi gerektiğidir. bu idam edildi i düğmesine ve kod üstünde tıklayıp sonra şu anda buBileşik

public void widgetSelected(SelectionEvent e) { 
    /* Retrieve the contents that are currently in middle composite*/ 
    Composite currentCenterComposite = EMWindow.getCenterCompsiteState(); 
    /* Retrieve the main composite*/ 
    Composite outerComposite=EMWindow.getOuterCompsiteState(); 
    if ((currentCenterComposite != null) && (!currentCenterComposite.isDisposed())) { 
    /* Remove children that are already laid out */ 
    Object[] children = currentCenterComposite.getChildren(); 
    for (int i = 0; i < children.length; i++) { 
((Composite)children[i]).dispose(); 
    } 
    } 

    currentCenterComposite = new CenterComp(currentCenterComposite); 
    GridData gd_centerComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); 
    gd_centerComposite.minimumHeight = 50; 
    currentCenterComposite.setLayoutData(gd_centerComposite); 
    currentCenterComposite.layout(true); 
    //currentOuterComposite.layout(); 
    outerComposite.layout(true); 
} 

Sorun yapmaya alışkınım koddur, hiçbir şey ı GUI, orta kompozit sonra içeriği yeniden boyutlandırmak kadar gerçekleşmesi görünüyor görünecek.

+0

Benzer sorunla karşı karşıyayım. Bazı metin alanları ve düğmeleri olan bir kompozitim var. Bir düğmeye basıldığında yeni bir onay kutusu alanı eklemek istiyorum. Ekleniyor, ancak yalnızca kullanıcı arayüzünü yeniden boyutlandırarak görebiliyorum. Kompozisyonda arama düzenini denedim .. ama hiçbir şey yapmıyor ... Bu sorunu nasıl çözdüğümü bana bildirir misiniz? –

cevap

6

Composite.layout() = Düzen ve LayoutData farklı şeyler olduğunu

Not "alıcı düzen varsa, için düzen hazırlamak sorar". LayoutData, Kompozit'e ebeveyn üzerinde nasıl davranılacağını söyler. Düzen, Kompozit'e çocuklarını nasıl düzenleyeceğini anlatır. Durumunuzda, currentCenterComposite üzerinde bir düzen ayarlamıyorsunuz, bunun için arama düzeninin() hiçbir etkisi yoktur.

Kompozitinizde ayrıca bir Düzen ayarlamaya çalışın.