# RCP - SWT :: Scrollbars in einer View



## Guest (9. Dez 2008)

Hallo,

ich habe ein Problem mit den Scrollbars in einer Eclipse RCP Anwendung. Ich möchte in einer Eclipse-View Scrollbars anzeigen um somit den Inhalt der View Scrollbar zu machen.

Ich habs über 2 Wege versucht, über eine Composite mit SWT.V_SCROLL sowie direkt über eine ScrolledComposite - hat beides mit unterschiedlichen Problemen nicht funktioniert.

Hier mal die Klassen mit dem ersten Versuch über eine Composite:


```
public class TestViewPart extends ViewPart{

	private static TestViewComposite testViewComposite;

	public void createPartControl(Composite parent) {
		testViewComposite = new TestViewComposite(parent, SWT.V_SCROLL);	
	}

	public void setFocus() {
		testViewComposite.setFocus();
	}
	
	public static TestViewComposite getTestViewComposite() {
		return testViewComposite;
	}
```

Das wäre das Composite, welches gescrollt werden sollte - die Buttons sind nur mal Testinhalt, da kommt eigentlich viel mehr, aber darum gehts ja hier nicht.

```
public class TestViewComposite extends Composite
implements PropertyChangeListener{
	
	public TestViewComposite(final Composite parent, int style) {
		super(parent, style);

		GridLayout gridLayout = new GridLayout(1, true);
		this.setLayout(gridLayout);
                //Test-Inhalt
		for(int i = 1; i < 15; i++) new Button(this, SWT.PUSH).setText("Blubber");
	}
```
Mir wird zwar eine Scrollbar angezeigt, jedoch scrollt diese nicht den Inhalt des TestViewComposite - beim bewegen des Scrollbalken tut sich gar nichts...  :roll: 

Nach dem lesen einiger Thread hier im Forum  :### bin ich auch auf das ScrolledComposite gestoßen, dann müsste der Code doch so ausseheh, wenn ich das richtig verstanden habe...:


```
public class TestViewPart extends ViewPart{

	private static TestViewComposite testViewComposite;

	public void createPartControl(Composite parent) {
		ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL);
		sc.setLayoutData(new GridData(GridData.FILL_BOTH)); 
		sc.setExpandVertical(true);
		testViewComposite = new TestViewComposite(parent, SWT.BORDER);
		sc.setContent(testViewComposite);	
	}

	public void setFocus() {
		testViewComposite.setFocus();
	}
	
	public static TestViewComposite getTestViewComposite() {
		return testViewComposite;
	}
```

Hier habe ich nun ein anderes Problem - mir wird die ScrollBar gar nicht erst angezeigt...

Ich hoffe ich hab mich trotz der frühen Uhrzeit verständlich ausgedrückt und ihr könnt mir helfen, da ich den Fehler einfach nicht finde ???:L 

(Falls das in die Rubrik RCP-Entwicklung gehört, bitte verschieben, aber ich denk es ist wohl doch eher ein SWT (Verständnis-) Problem)


----------



## Wildcard (9. Dez 2008)

```
public void createPartControl(Composite parent) {
      ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL);
      sc.setLayoutData(new GridData(GridData.FILL_BOTH));
      sc.setExpandVertical(true);
      testViewComposite = new TestViewComposite(sc, SWT.BORDER);
      sc.setContent(testViewComposite);   
   }
```


----------



## Guest (9. Dez 2008)

Danke für deine Antwort Wildcard,

das hatte ich schon versucht - wenn ich der testViewComposite das ScrolledComposite als Parent mitgebe, wird mir in der View gar nichts angezeigt. -> Keine Scrollbar und auch die Buttons, die ich im testViewComposite erstelle sind nicht sichtbar...  :cry:


----------



## Wildcard (9. Dez 2008)

Entweder braucht das ScrolledComposite ein Layout, oder der Inhalt eine Größe, such es dir aus.


----------



## Guest (9. Dez 2008)

Wenn ich die API von SWT richtig verstehe, kann man einem ScrolledComposite kein Layout zuweisen bzw. es bringt nicht wirklich etwas, dies zutun:



> /**
> * Sets the layout which is associated with the receiver to be
> * the argument which may be null.
> *
> ...



Habs deswegen mal mit deinem anderen Tipp versucht, die Größedes Inhalts zu setzen:


```
public void createPartControl(Composite parent) {
      ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL);
      sc.setExpandVertical(true);
      testViewComposite = new TestViewComposite(sc, SWT.BORDER);
      testViewComposite.setSize(100, 100);
      sc.setContent(testViewComposite);   
   }
```

Allerdings hab ich nun keine Scrollbar an der Seite... :roll: 
Durch ein

```
sc.setAlwaysShowScrollBars(true);
```
kann ich die Vertikale Scrollbar zwar dazu _zwingen_ zu erscheinen - allerdings ist sie ausgegraut, also disabled...

Das Ding macht mich noch Wahnsinnig - und das am frühen morgen  :autsch:


----------



## Wildcard (9. Dez 2008)

Vielleicht ist dein ScrolledComposite einfach größer als 100,100?


----------



## Guest (9. Dez 2008)

Na ja, ich kann ja die View in Eclipse beliebig verkleinern - dann müsste doch die ScrolledComposite in der Größe angepasst werden...
Wenn ich die View groß genug ziehe, sind alle zu sehen.
Wenn ich die View aber verkleiner, sind nicht mehr alle Buttons sichtbar, aber die Scrollbar interessiert das wohl nicht...


----------



## Wildcard (9. Dez 2008)

Schau mal hier:
http://dev.eclipse.org/viewcvs/inde...rg/eclipse/swt/snippets/Snippet5.java?view=co


----------



## Guest (9. Dez 2008)

Danke für den Link, aber die Snippets zum ScrolledComposite hab ich mir schon alle durchgeschaut und daran hab ich mich ja eigentlich bei der Implementierung auch orientiert - deshalb wundert es mich ja umso mehr, warum das ganze nicht funktioniert...  :roll: 

Kann es vielleicht irgendwie damit zusammenhängen, dass der ViewPart dem testViewComposite mehr Platz einräumt, als eigentlich sichtbar ist und dieScrollbar deswegen denkt, dass ja alles so weit in Ordnung ist und sich somit aus der ganzen Sache raushält...?


----------



## Wildcard (9. Dez 2008)

Hast du dem Parent auch ein Layout gesetzt?


----------



## Guest (9. Dez 2008)

Na ja, die Methode:


```
public void createPartControl(Composite parent) {
```
wird ja durch das Eclipse RCP selbst irgendwann bei der initialisierung aufgerufen - explizit hab ich da kein Layout gesetzt, aber laut debugger hat der Parent ein FillLayout...
Sollte man daran eventuell mal drehen  ???:L


----------

