# Aus einem View in das andere wecheln.



## Tagamoga (12. Sep 2007)

Hallo Allerseits.

Ich habe die "glorreiche" Aufgabe mich mit RCP und Java unter Eclipse auseinander zu setzen.
Dabei soll ich ein kleines Progrämmchen coden.

Stadardmäßig wird bei einem Template eine ein View mitgelifert und beim starten sofort angezeigt.
Nun soll ich eine eigene View proggen und diese per Menübefehl anzeigen, während die andere geschlossen wird.

Also griff ich mir den Ectension-Wizzard, definierte mir (nach Anleitung) eine neue View nach einem gegebenen plugin und raus kam:


```
package gc.views;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class InitializeGameView extends ViewPart {

	public static final String ID = "NeuerView";
/**
	public InitializeGameView() {
		System.out.println("bin drin.");
		// Hier kommt "bald" die Initialisierung der Inhalte
	}
/**/
	public void createPartControl(Composite parent) {
		System.out.println("bin drin.");
		setPartName("Neuer View");

	}

	public void setFocus() {
		// TODO Auto-generated method stub

	}

}
```

Aufgerufen wird das folgender Weise:


```
public class Perspective implements IPerspectiveFactory {
	
	public void createInitialLayout(IPageLayout layout) {
		String editorArea = layout.getEditorArea();
		layout.setEditorAreaVisible(false);
		layout.setFixed(true);
		
		layout.addStandaloneView(StartView.ID, true,  IPageLayout.LEFT, 1.0f, editorArea);
		//layout.addStandaloneView(NewView.ID, true, IPageLayout.LEFT, 1.0f, editorArea);
	}
 }
```

lasse ich das so laufen wird der StartView erzeugt und angezeigt.
Kommentiere ich aber den StartView aus und ersetzte ihn durch "NewView" wird aber rein garnichts angezeigt.

Was mache ich da falsch?

Grüße, Maja

Edit: entschuldigt bitte, aber ich habe etwas rumprobiert und davon ist etwas in den Code gekommen. Nun stimmt er aber... hoffe ich... *bg*


----------



## Wildcard (12. Sep 2007)

Rechte Taste auf die Perspektive -> reset perspective  :wink:


----------



## Tagamoga (12. Sep 2007)

Hm... also wo genau soll das sein, dieses reset?

In eclipse habe ich im CodeEditor, PackageExplorer, in der plugin und im Produkt-File nachgesehen und nicht gefunden... 

habe ich erwähnt, dass ich anfängerin bin?   



Und wie löse ich es per ProgrammCode? die Klasse Perspektive hat doch keine Funktion, wie reset...


----------



## Wildcard (12. Sep 2007)

Du musst auf dem Button (i.d.R. oben rechts) der Perspektive reset aufrufen.
Der Grund dafür ist, das sich die Perspektiven die Anordnung der Views im Workspace speichert.
Wenn du also nachträglich was änderst und die Perspektive noch gespeichert ist, wirst du keine Veränderung sehen.


----------



## Tagamoga (12. Sep 2007)

ah... da bist Du... ok gecheckt und gemacht. Keine Veränderung...

Vielleicht drücke ich mich aber auch nur schlecht aus.

Denn ich schreibe ein eigenes Programm, in dem zwei verschiedene Views eingefügt sind. in diesem Programm (nicht in Eclipse) soll man nun zwischen den View hin und her schlaten können. Das muss doch programmtechnisch zu lösen sein. 

Ist ja irgendwie sinnfrei, wenn ich in meiner Anwendung nur die Views ändern kann, wenn ich unter eclipse jedes Mal die Perspektive reseten muss... oder?


----------



## Wildcard (12. Sep 2007)

Was hat denn die Anzeige einer View zur Laufzeit mit der Definition einer Perspektive zu tun?
Eine Perspektive ist lediglich eine initiale Konfiguration von vorhandenen Views die der User anschließend anpassen kann.


----------



## Tagamoga (12. Sep 2007)

In einer Beschreibung zu RCP stand, dass Views nur in einer vorgenerierten Perspective erzeugt werden können und ohne diese nicht angezeigt werden können.

Sollte dann dies nicht stimmen, kannst Du mir dann bitte sagen, wie ich den einen View während der Laufzeit schließen und stattdessen den zweiten View öffne?


----------



## Wildcard (12. Sep 2007)

http://help.eclipse.org/help31/topi...WorkbenchPage.html#showView(java.lang.String)


----------



## Tagamoga (12. Sep 2007)

Also im Augenblick fühle ich mich von Dir ein wenig verarscht.

Gut, am Anfang war da vielleicht noch das klassische Missverständnis. Doch wie soll mir dieser Link helfen?

Supi, da existiert ein Interface mit der Funktion hideView und ShowView... hui...

Wie komme ich an dieses Interface? Muss ich eine eigene Klasse ableiten, damit ich damit interaggieren kann? Wie gehe ich sicher, dass diese Views zur Page gehören? Wie muss ich da mit den Perspectiven hantieren (schließlich gibt es dazu ja auch genügend Funktionen diesbezüglich) etc...

Kannst Du mir das bitte normal erklären oder kennst Du vielleicht ein Tutorial?

Wenn Du aber nicht magst oder kannst, dann bitte antworte einfach nicht und lass vielleicht den anderen eine Chance. Vielleicht existiert da ja ein geduldiger Mensch, der sich auf meine Lücken - ich bin immernoch Anfänger - einlässt und es mir eklrären kann, was ich offenbar nicht verstehe.

Dennoch vielen Dank für Deine Mühe bis jetzt.


----------



## Wildcard (12. Sep 2007)

Tagamoga hat gesagt.:
			
		

> Also im Augenblick fühle ich mich von Dir ein wenig verarscht.
> 
> Gut, am Anfang war da vielleicht noch das klassische Missverständnis. Doch wie soll mir dieser Link helfen?
> 
> Supi, da existiert ein Interface mit der Funktion hideView und ShowView... hui...


Behandelst du Leute die dir helfen wollen immer so? :noe:
Wie soll ich bitte beurteilen können was du über Eclipse weißt und was nicht?
Die IWorkbenchPage ist ein zentrales Konzept von Eclipse. Das du damit nichts anfangen kannst, konnte ich wohl schlecht wissen, oder?
Wie du an eine IWorkbenchPage herankommst, hängt von dem Kontext ab in dem du sie brauchst. Pauschal kann ich dir darauf keine Antwort geben.
Ein ViewPart hat zum Beispiel eine init Methode:


```
public void init(IViewSite site) throws PartInitException
{
   super.init(site);
   IWorkbenchPage page = site.getPage();
}
```


----------



## Tagamoga (12. Sep 2007)

Wildcard hat gesagt.:
			
		

> Behandelst du Leute die dir helfen wollen immer so? :noe:
> Wie soll ich bitte beurteilen können was du über Eclipse weißt und was nicht?



Ich führe mehrere Übungsgruppen und Vorlesungen für Mathematik. Wenn denn jemand zu mir kommt und eine spezielle Frage hat, die mir zu nebulös erscheint oder mir Informationen fehlen, um sie zu beantworten, dann frage ich genau die Lücken ab, die mir für meine Antwort fehlen. Denn woher sollte der Anfänger von seinen Lücken wissen, wenn er es eben nicht weiß? Wie kann ich Dich von irgendetwas in Kenntnis setzten, wovon ich noch nie gehört habe?

Also wenn Du mir wirklich helfen möchtest, dann bitte fang damit an, anstatt mit kleinen unzusammenhängenden Bröckchen nach mir zu werfen, die ich unmöglich verstehen kann. :noe: 



			
				Wildcard hat gesagt.:
			
		

> Ein ViewPart hat zum Beispiel eine init Methode:
> 
> 
> ```
> ...



supi... und wie nützt sie mir, wenn ich damit den ersten automatisch geöffneten View schließen möchte und den anderen anzeigen möchte? Woher bekomme ich schon wieder den korrekten Parameter für "site"? Wie komme ich überhaupt programmtechnisch an den View der überhaupt geöffnet ist? U.s.w....

Was ich habe und wie weit ich bin, steht oben im ersten Post. 

Und nocheinmal: Ich bin Anfängerin, die Hilfe sucht, weil sie etwas nicht kann oder nicht versteht! Ich bin kein Java-Spezi, der sein halbes Leben nur in Eclipse codiert hatte...


----------



## Wildcard (12. Sep 2007)

Tagamoga hat gesagt.:
			
		

> Also wenn Du mir wirklich helfen möchtest, dann bitte fang damit an, anstatt mit kleinen unzusammenhängenden Bröckchen nach mir zu werfen, die ich unmöglich verstehen kann. :noe:


Wenn du diese 'unzusammenhängenden Bröckchen' nicht verstehen kannst, dann liegt die Aufgabe über deinen Möglichkeiten.




> supi... und wie nützt sie mir, wenn ich damit den ersten automatisch geöffneten View schließen möchte und den anderen anzeigen möchte? Woher bekomme ich schon wieder den korrekten Parameter für "site"? Wie komme ich überhaupt programmtechnisch an den View der überhaupt geöffnet ist? U.s.w....


Das ist eine Methode die vom Framework aufgerufen wird und nicht von dir  :roll: 
Du erbst doch selbst von ViewPart, scheinst aber nicht in der Lage deren API-Doc zu lesen (und das kann man von jedem erwarten bevor er fragt, insbesondere bei Anfängern).

Ich schrieb weiter oben bereits das du mit der IWorkbenchPage eine View öffnen kannst und weiterhin schrieb ich, das man nicht pauschal sagen kann, wo man die IWorkbenchPage nun her bekommt, da es vom Kontext im dem sie benötigt wird abhängt.
Also:
*Wo möchtest du IWorkbenchPage#showView* aufrufen?




> Ich führe mehrere Übungsgruppen und Vorlesungen für Mathematik. Wenn denn jemand zu mir kommt und eine spezielle Frage hat, die mir zu nebulös erscheint oder mir Informationen fehlen, um sie zu beantworten, dann frage ich genau die Lücken ab, die mir für meine Antwort fehlen. Denn woher sollte der Anfänger von seinen Lücken wissen, wenn er es eben nicht weiß?


Du versuchst aber auch nicht eine Gehirn-OP durchzuführen und fragst die Schwester beiläufig wie ein Skalpell aussieht.
Ich mache dir keinen Vorwurf wenn du etwas nicht weißt, aber pflaum' mich gefälligst nicht an weil dir Grundlagen fehlen die für die Erfüllung deiner Aufgabe eigentlich notwendig wären. 
Frag nach und gut.


----------



## Tagamoga (12. Sep 2007)

Damit ich erstmal Weiß, dass mit bestimmte Grundlagen fehlen, muss ich wohl erst wissen das sie mir fehlen. Ich bin nicht hellseherisch veranlagt. Welche mir fehlen kann nur jemand mir sagen, dem es klar ist!

Wenn Du dazu nicht in der Lage bist, verschwende nicht meine Zeit, die ist nicht nur mir zu teuer.

Und natürlich liegt diese Aufgabe über meinen jetztigen Möglichkeiten, sonst hätte ich wohl kaum hier Hilfe gesucht. Du Intelligenzbolzen.

Und wenn die angemahnte Funktion eh nicht von mir aufgerufen wird, verschon das Internet mit unnötigem Traffic.

Aufgabe ist einfach und klar: ich möchte an einer beliebigen Stelle den aktuellen View schließen und den selbstgeschriebenen öffnen.

Doch Du brauchst mir nicht antworten, denn ich werde meinen account hier löschen. So werde ich das leider nicht mehr mitbekommen. Nur weiß ich, was ich für meine Vorlesungen aus Deiner Hilfearbeit ziehen werden.

nur so nebenbei: Einer hat sich über PN meiner erbarmt. Hier die Lösung:


```
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ViewA.ID).dispose();
try {
	PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ViewB.ID);
     } catch (PartInitException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
```

So long, nichts für ungut und danke für die Zeit.


----------



## Wildcard (12. Sep 2007)

Damit hängst du die View in die aktuelle Perspektive, was nicht immer die ist, von der in deinem Eingangsposting die Rede war. Aber was red ich? Du trollst ja jetzt wo anders.


----------

