# Composite



## ich_wills_wissen (5. Mai 2006)

Hallo zusammen 

Habe folgendes Anliegen:


Ich habe ein Composite (SWT) welches unter anderem neben Buttons, Labels etc 
auch ein weiteres Composite (ich nenne es hier einfach mal Kind) enthält.
In diesem Composite (Kind) befinden sich wiederum Labels. 
Das Kind soll sich aber nicht von der größe her so an seinen Inhalt anpassen, daß dieser
komplett sichtbar ist (dann sieht man von den Elementen des Elterncomposite nämlich nichts mehr).
Ich nutze momentan GridLayouts und habe dem Kind-Composite ein heighthint = 360
zugeordnet, weil es sich von der Höhe her nicht weiter als 360 Pixel ausdehnen soll.
Dem Konstruktor des Kind-Composiutes habe ich ein SWT.V_SCROLL mitgegeben.
Jetzt bekomme ich zwar eine Scrollbar angezeigt, die bewirkt aber nichts !
Ich kann scrollen soviel ich will, ich bekomme nur den Inhalt des aktuellen Ausschnitts
vom Kind-Composite zu sehen.    :bahnhof: 

Was muss ich machen damit ich scrollen kann ?


Danke fürs lesen, ich bin für jede Hilfe dankbar !  ???:L 


Gruß,

ich_wills_wissen    :###


----------



## SamHotte (5. Mai 2006)

So ganz kapier ich es nicht ... das Kindcomposite soll sich selbst kleiner machen und einen Scrollbalken  bekommen, oder soll das ElternComposite Scrollen?

Zeichne das doch mal grob auf, vielleicht hilft das (zumindest mir).


----------



## ich_wills_wissen (5. Mai 2006)

Hi SamHotte,


Mir ist gerade eingefallen wie ich es besser erklären kann:

Der Inhalt des Kindcomposites ist größer (höher)  als das Kindcomposite selbst.
Das heißt ich sehe immer nur einen Teil des Inhalts, ich will aber alles sehen können.
Die Größe des Kindcomposites ist aber fix, d.h. es kann (und soll) sich nicht so hoch machen wie der Inhalt.

Ich habe gedacht, ich könnte das dadurch erreichen indem ich währen ich das Kindcomposite
erstelle dem Konstruktor SWT.V_SCROLL mitgebe:


```
Composite kindcomposite = new Composite(elternComposite,  SWT.BORDER | SWT.V_SCROLL);
```

Wenn ich jetzt mein Programm neustarte hat das kindcomposite eine Scrollbar in der Vertikalen.
Alles wunderbar.
Wenn ich jetzt den Scrollbar nach unten ziehe erwarte ich, daß der Inhalt mitscrollt.
Das tut er aber nicht, ich sehe immer nur den selben Ausschnitt vom Inhalt.

Das ist so wie wenn Du hier im Forum nach unten scrollst, aber der Inhalt in deinem Browser einfach
stehen bleibt.


Gruß,

ich_wills_wissen


----------



## ich_wills_wissen (5. Mai 2006)

Okay, also laut dem hier:

www.tutorials.de/forum/swing-awt-swt/...

sollte man das mit einem ScrolledComposite lösen können.
Das funktioniert bei mir aber nicht (habe einfach das KindComposite durch ein Scrolledcomposite ausgetauscht).
Das Resultat ist, daß ich jetzt ein leeres Kindcomposite sehe... na toll    


Hat jemand eine Idee wie ScrolledComposites funktionieren ?   :bahnhof: 


Gruß,

ich_wills_wissen


----------



## SamHotte (5. Mai 2006)

Nö, hab ich noch nie benutzt ... sorry!


----------



## Clip (30. Aug 2006)

Hallo,

ich hatte auch gerade das Problem.
Es geht. Wichtig ist, die setContent() Methode von SWT zu benutzen:

```
ScrolledComposite scroller = new ScrolledComposite(composite, SWT.BORDER| SWT.H_SCROLL | SWT.V_SCROLL);
		scroller.setExpandHorizontal(true);
		scroller.setExpandVertical(true);
		scroller.setLayoutData(new GridData(GridData.FILL_BOTH));
						
		TableViewer tableViewer = new TableViewer(scroller, SWT.BORDER );
		tableViewer.getTable().setHeaderVisible(true);
		tableViewer.getTable().setLinesVisible(true);
		for (int i = 0; i < 13; i++) {
			TableColumn column = new TableColumn(tableViewer.getTable(), SWT.LEFT);
			column.setText(new Integer(i).toString());
			column.setWidth(100);
		}
		tableViewer.setLabelProvider(new SampleTableLabelProvider());
		tableViewer.setContentProvider(new ArrayContentProvider());
		tableViewer.setInput(samples);		  
		
		scroller.setContent(tableViewer.getTable());
```


----------

