2010-05-06 7 views
11

Nel mio caso ho due figli di un SashForm, ma la domanda si applica a tutti i Composite s.Modifica dell'ordine dei figli di un materiale composito 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); 
    }  
} 

Non so in anticipo in quale ordine verranno chiamati questi metodi. Come posso assicurarmi che child1 sia posizionato a sinistra e child2 a destra? In alternativa, c'è un modo per cambiare il loro ordine come figli di sashformdopo vengono creati?

Attualmente la mia idea migliore è quello di mettere in segnaposti in questo modo:

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

risposta

13

Quando si crea child1, controllare se child2 è già stata creata un'istanza. Se lo è, significa child1 è sulla destra, perché è stato creato in seguito, in modo da avere per fare questo:

child1.moveAbove(child2); 

Speranza che aiuta.

+0

Lo fa. Ho appena perso l'esistenza di 'moveAbove' perché stavo cercando tra i metodi di' Composite'. –

+1

Grazie per queste informazioni :) Una cosa buona da notare è che puoi usare null per spostarlo in alto. –

Problemi correlati