2010-05-06 7 views
11

Dans mon cas, j'ai deux enfants d'un SashForm, mais la question s'applique à tous Composite s.Modification de l'ordre des enfants d'un composite SWT

class MainWindow { 
    Sashform sashform; 
    Tree child1 = null; 
    Table child2 = null; 

    MainWindow(Shell shell) { 
     sashform = new SashForm(shell, SWT.NONE); 
    } 

    // Not called from constructor because it needs data not available at that time 
    void CreateFirstChild() { 
     ... 
     Tree child1 = new Tree(sashform, SWT.NONE); 
    } 

    void CreateSecondChild() { 
     ... 
     Table child2 = new Table(sashform, SWT.NONE); 
    }  
} 

Je ne sais pas à l'avance dans quel ordre ces méthodes seront appelées. Comment puis-je m'assurer que child1 est placé sur la gauche, et child2 sur la droite? Alternativement, est-il un moyen de changer leur ordre en tant qu'enfants de sashformaprès ils sont créés?

Actuellement ma meilleure idée est de mettre en placeholders comme ceci:

class MainWindow { 
    Sashform sashform; 
    private Composite placeholder1; 
    private Composite placeholder2; 
    Tree child1 = null; 
    Table child2 = null; 

    MainWindow(Shell shell) { 
     sashform = new SashForm(shell, SWT.NONE); 
     placeholder1 = new Composite(sashform, SWT.NONE); 
     placeholder2 = new Composite(sashform, SWT.NONE); 
    } 

    void CreateFirstChild() { 
     ... 
     Tree child1 = new Tree(placeholder1, SWT.NONE); 
    } 

    void CreateSecondChild() { 
     ... 
     Table child2 = new Table(placeholder2, SWT.NONE); 
    }  
} 

Répondre

13

Lorsque vous créez child1, vérifiez si child2 a déjà été instancié. Dans ce cas, cela signifie child1 est à droite, car il a été créé plus tard, donc vous devez faire:

child1.moveAbove(child2); 

Hope it helps.

+0

C'est le cas. J'ai juste raté l'existence de 'moveAbove' parce que je regardais parmi les méthodes de' Composite'. –

+1

Merci pour cette info :) Une bonne chose à noter est que vous pouvez utiliser null pour le déplacer vers le haut. –

Questions connexes