# Bilder wechseln



## kiesa747 (13. Sep 2011)

Hey,

ich habe 3 Bilder (pictureA, pictureB,pictureC) (urls) und einen popup menu , ich will jetzt zwischen den bildern switchen zb. von pictureA nach pictureB oder von pictureB nach pictureC . vom pictureA nach pictureC hin und hier switchen klapt sehr gut aber wenn ich noch zum pictureB switchen will sind auf einmal 2 bilder zu sehen (A und B ,was ich nicht will) 


```
newItem.addItem("pictureA", new Command(){
        		public void menuSelected(MenuItem selectedItem) {
                    if(!pictureA.equals(pictureB)){
                    	window.replaceComponent(pictureB,pictureA);
                    }
        	}
        });
        newItem.addItem("pictureB", new Command(){
            	public void menuSelected(MenuItem selectedItem) {
                    if(!pictureB.equals(pictureA)){
                    	window.replaceComponent(pictureA,pictureB);
                    }
    	}
    });
        newItem.addItem("pictureC", new Command(){
            	public void menuSelected(MenuItem selectedItem) {
                    if(!pictureC.equals(pictureA)){
                    	window.replaceComponent(pictureA,pictureC);
                    }
            	}
    });
```

hat einer eine Idee wie ich die verzweigungen optimieren soll ?


Mfg

kiesa747


----------



## SlaterB (13. Sep 2011)

füge z.B. alle drei Komponenten in ein Array und rufe remove für alle drei auf (können natürlich auch drei normale Befehle sein), 
dann sind alle weg, dann füge das eigene ein, je nach Command,

generell bietet sich an, hier eine Untermethode zu schreiben und nur
> createCommand(newItem, "A");
> createCommand(newItem, "B");
> createCommand(newItem, "C");
aufzurufen oder ähnlich, 
der restlichen Code inklusive Command-Definition kann immer derselbe sein, nur von wenigen Parametern abhängig,
überlege ob du dahin einen Weg siehst, das wäre schon ein zentraler Schritt zu echter Programmierfähigkeit

kein doppelter Code, ein echter Grundsatz


----------



## bygones (13. Sep 2011)

keine anonyme klasse nehmen, sondern eine implementierung

```
newItem.addItem("pictureA", new PicSwitchCommand(pictureA, pictureB));
```
bzw dann fuer die anderen commands ebenso. 

Die Klasse implementiert die menuSelected methode mit den entsprechenden Bildern


----------



## kiesa747 (13. Sep 2011)

SlaterB hat gesagt.:


> füge z.B. alle drei Komponenten in ein Array und rufe remove für alle drei auf (können natürlich auch drei normale Befehle sein),
> dann sind alle weg, dann füge das eigene ein, je nach Command,
> 
> generell bietet sich an, hier eine Untermethode zu schreiben und nur
> ...



Mein erster versuch war so ähnlich , ich habe eine methode erstellt die die alten Component entfernt :

nichts Besonderes 
	
	
	
	





```
public void removeOldComponents(){
    	
    	window.removeComponent(A);
    	window.removeComponent(B);
    	window.removeComponent(C);
    }
```
 habe die methode dann ins menu eingebaut und am ende das entsprechende Bild hinzugefügt 
	
	
	
	





```
window.addComponent(ausgewähltes Bild);
```

das problem dabei ist das das Bild dann am ende meiner Componentenliste hinzugefügt wird  (hab noch ein button ein slider und ein paar andere sachen ) das bild wird dann unter dem menu und den anderen Componenten erzeugt (was ich vermeiden will).


----------



## SlaterB (13. Sep 2011)

dann füge an diese Stelle ein Panel als Platzhalter ein und remove alles in diesem Panel (leicht removeAll()) + adde das neue Bild,
evtl. Probleme mit zusätzlichen Millimetern Rand

noch ne Variante: prüfe der Reihe nach durch, welches Bild enthalten ist, gibt doch bestimmt contains usw.,
ansonsten vielleicht extern irgendwo ablegen, wo alle drei Commands vorbeikommen,
merke oder bestimme jedenfalls das vorhandere Bild, führe das replaceComponent() mit dieser Variablen aus


----------



## kiesa747 (13. Sep 2011)

komm einfach nicht mehr weiter  

habs so weit gebracht das ich zwischen pics hin und hier wechseln kann die bleiben auch da wo sie seien müssen aber wenn ich ein zweites mal aufs bild klicke wandert der nach unten :/

mit nem panel kann ich nichts machen weil die bilder von nem servlet an einem browser geschickt werden und via Portlet angezeigt verden


----------



## SlaterB (13. Sep 2011)

meine zweite Variante müsste doch so gut gehen wie früher zwischen zwei Bildern zu wechseln, falls das je ging,
allgemein klingt das ja bisschen abenteuerlich,

Problem mit dem Panel verstehe ich nicht wirklich, in welche Komponente fügst du denn bisher ein, 
gibt es nur eine auf oberster Ebene, keine Unterstrukturierung? 
ob nun Panel oder was anderes ist ja herzlich egal, falls es überhaupt irgendwas gibt

was genau verwendest du aktuell eigentlich bei dem 'zweites mal aufs bild klicke wandert der nach unten' auftritt?
wahrscheinlich kann ich dazu aber nichts sagen wenn es um Portlet geht, nicht auf weitere Antwort von mir warten,
ändere jetzt noch Titel, und mit Java-Basics hat das endgültig nichts mehr zu tun, verschoben..


----------



## kiesa747 (13. Sep 2011)

habs mit Vaadins panel gemacht , das switchen zwichen Bildern funktioniert super kannst als erledigt markieren  schuld dir was Danke


----------

