2012-04-26 15 views
5

Próbuję utworzyć przewijany kompozyt, który ma kompozyt z układem siatki wewnątrz.Użyj GridLayout w Scrolled Composite

Jednak gdy próbuję ustawić zawartość przewiniętego kompozytu nic się nie ładuje. Ta opcja pojawia się tylko w przypadku kompozytów z układami siatki.

Co robię źle?

mój kod:

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

Odpowiedz

9

Po pęczek błahy mam następujący pracować nadzieję, że pomoże ktoś inny się.

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

Bardzo pomocna! Dzięki za udostępnienie! –

4

Jeśli fragment z Talon06 nie działa, spróbuj wprowadzić następujące zmiany.

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

Zauważyłem, że komponenty w obrębie ScrolledComposite były widoczne tylko wtedy, gdy wyraźnie ustawiłem rozmiar złożonego.

@ Talon06: Dzięki za twoje niesamowite odkrycie!

+0

Dziękuję za zmiany, które powodują, że kompozycja jest widoczna w zakładce Konstruktora systemu Windows, co pozwala mi szybciej działać. – Talon06

Powiązane problemy