2010-09-24 3 views
0

Je construis une interface utilisateur SWT, et il a une fenêtre (Shell) avec trois composites empilés les uns sous les autres. Je veux que:Composite expansible verticalement

  1. tout d'étendre à la largeur maximale possible (largeur de la fenêtre)
  2. les premier et troisième matériaux composites ont une hauteur de 100px chaque
  3. le troisième composite étendre à une hauteur de height_of_parent - 200px - any_margins_or_paddings .

L'objectif 2 est trivial, et j'ai fait l'objectif 1 en utilisant le ColumnLayout défini here.

Comment impolement Objectif 3?
Un grand merci :)

PS: Je suis très nouveau à SWT.

Répondre

0

J'utiliser un GridLayout et faire quelque chose comme ceci:

GridLayout layout = new GridLayout(); 
parent.setLayout(layout); 

GridData data1 = new GridData(SWT.LEFT, SWT.FILL, false, true); 
data1.heightHint = 100; 
widget1.setLayoutData(data1); 

GridData data2 = new GridData(SWT.LEFT, SWT.FILL, false, true); 
data2.heightHint = 100; 
widget2.setLayoutData(data2); 

GridData data3 = new GridData(SWT.LEFT, SWT.TOP, false, false); 
data3.heightHint = Math.max(1, parent.getSize().y - 200 - layout.marginHeight * 2); 
widget3.setLayoutData(data3); 

parent.addControlListener(new ControlAdapter() { 
    public void controlResized(ControlEvent e) { 
     GridData data = (GridData)widget3.getLayoutData(); 
     data.heightHint = parent.getSize().y - 200 - layout.marginHeight * 2; 
     widget3.setLayoutData(data); 
     parent.layout(true); 
    } 
});