2012-04-26 11 views
5

Estoy intentando crear un compuesto desplazado que tenga un compuesto con un diseño de cuadrícula dentro.Usar GridLayout en Composite desplazado

Sin embargo, cuando intento establecer el contenido del compuesto desplazado, nada se carga. Esto parece afectar solo a los composites con diseños de cuadrícula.

¿Qué estoy haciendo mal?

Mi Código:

CTabItem tbtmNotes = new CTabItem(tabFolder, SWT.NONE); 
    tbtmNotes.setText("Notes"); 
    ScrolledComposite scrollComposite = new ScrolledComposite(tabFolder, SWT.V_SCROLL | SWT.BORDER); 
    tbtmNotes.setControl(scrollComposite); 
    scrollComposite.setContent(new hm_Composites.Comp_Animal_Notes(tabFolder, SWT.None, a)); 

Respuesta

9

Después de un montón de tocar el violín me dio la siguiente para trabajar espero que ayude a alguien más ahí fuera.

public Comp_Animal_Notes(Composite parent, int style, Animal a) 
     throws Exception { 
    super(parent, SWT.NONE); 
    setLayout(new FillLayout(SWT.HORIZONTAL)); 
    ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    scrolledComposite.setExpandHorizontal(true); 
    scrolledComposite.setExpandVertical(true); 

    Composite composite = new Composite(scrolledComposite, SWT.NONE); 
    composite.setLayout(new GridLayout(2, false)); 

    ArrayList<Note> alNotes = a.getAnimalNotes(); 
    this.setRedraw(false); 
    for (int i = 0; i < alNotes.size(); i++) { 
     Note note = alNotes.get(i); 

     CLabel lblNoteDate = new CLabel(composite, SWT.BORDER); 
     lblNoteDate.setFont(SWTResourceManager.getFont("Tahoma", 8, 
       SWT.BOLD)); 
     lblNoteDate.setText("Date:"); 
     lblNoteDate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); 

     CLabel lblNotedatetxt = new CLabel(composite, SWT.BORDER); 
     lblNotedatetxt.setBackground(SWTResourceManager 
       .getColor(SWT.COLOR_WHITE)); 
     lblNotedatetxt.setText(note.getUserDate()); 
     lblNotedatetxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 

     CLabel lblNoteTxt = new CLabel(composite, SWT.BORDER); 
     lblNoteTxt.setBackground(SWTResourceManager 
       .getColor(SWT.COLOR_WHITE)); 
     lblNoteTxt.setText(note.getStrNote()); 
     lblNoteTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); 
    } 

    scrolledComposite.setContent(composite); 
    scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

    this.setRedraw(true); 
} 
+0

¡Muy útil de hecho! ¡Gracias por compartir! –

4

Si el fragmento de Talon06 no funciona, intente realizar los siguientes cambios.

scrolledComposite.setContent(composite); 

//add this line 
composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

//not sure about this line, was optional in my case 
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

this.setRedraw(true); 

he encontrado que los componentes dentro ScrolledComposite solamente estaban recibiendo visibles si fijo explícitamente tamaño del compuesto.

@ Talon06: ¡Gracias por tu increíble hallazgo!

+0

Gracias por los cambios, esto hace que el material compuesto sea visible en la pestaña Diseño del generador de Windows para que las cosas vayan mucho más rápido. – Talon06

Cuestiones relacionadas