2010-05-27 7 views
5

Je suis nouveau à SWT. Le projet sur lequel je travaille comporte un composite principal avec 3 composites enfants. le composite supérieur est constitué de boutons, et le composite central sert à afficher le contenu, et le composite inférieur à d'autres fins. Ce qui doit arriver, c'est quand je clique sur un bouton dans le composite supérieur, il doit déclencher le changement de contenu dans le composite central. c'est le code que je suis habitué à faireComment redessiner le composite swt après avoir cliqué sur un bouton pour modifier le contenu de ce composite

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

Le problème est en ce moment après que je clique sur le bouton et, rien ne semble au-dessus du code a été exécuté arriver jusqu'à ce que je remets à la côte de l'interface graphique, le contenu dans le composite milieu apparaîtra.

+0

Je suis confronté au même problème. J'ai composite qui a quelques champs de texte et des boutons. Je veux ajouter un nouveau champ de case à cocher en cliquant sur un bouton. Il est ajouté, mais je ne vois que sur le redimensionnement de l'interface utilisateur. J'ai essayé d'appeler la mise en page sur Composite..mais cela ne fait rien ... Pouvez-vous me dire comment avez-vous résolu ce problème? –

Répondre

6

Composite.layout() = « Si le récepteur dispose d'une mise en page , demande la mise en page de Étalez »

Notez que la mise en page et LayoutData sont deux choses différentes. LayoutData indique au composite comment se comporter sur le parent. La mise en page indique au compositeur comment organiser ses enfants. Dans votre cas, vous ne définissez PAS de disposition sur currentCenterComposite, par conséquent, l'appel de layout() n'a aucun effet. Essayez également de définir une mise en page sur votre composite.

Questions connexes