# Fragen zur Gui-Aktualisierung



## Juergen-87 (14. Mrz 2015)

Hallo, ich arbeite zur Zeit an der Umsetzung eines Strategie-Kartenspiels.
Dabei werden Karten aufgedeckt und dann in der Gui in einer ArrayList<JComponent> dargestellt. Darin sind Buttons (für Karten mit Sonderfunktionen) und Labels (für Karten ohne Sonderfunktion) enthalten.
Jetzt kann durch Nutzen einer Sonderfunktion auch mal eine Karte aus dieser ArrayList<JComponent> entfernt werden und soll auch nicht mehr angezeigt werden. Jetzt habe ich manchmal das Problem, dass meine programmierte Gui-Aktualisierung nicht richtig funktioniert. In der Spiel-Logik (extra Klasse) scheint alles korrekt zu laufen, es wird aber immer noch die Karte angezeigt, die eigentlich entfernt werden sollte.

Hier kommt mein Code zur Gui-Aktualisierung:

```
void spielGuiAktualisieren() {
		abwurfstapelLabel.setText("Abwurfstapel: "+Integer.toString(spiel.getZerstoerteKampfkarten().getAnzahl())+" Karten");
		robinsonstapelLabel.setText("Kampfkartenstapel: "+Integer.toString(spiel.getKampfkartenStapel().getAnzahl())+"/"+Integer.toString(spiel.getKampfkartenStapel().getAnzahl()+spiel.getKampfkartenAblageStapel().getAnzahl()));
		gefahrenstapelLabel.setText("Gefahrenkartenstapel: "+Integer.toString(spiel.getGefahrenkartenStapel().getAnzahl())+"/"+Integer.toString(spiel.getGefahrenkartenStapel().getAnzahl()+spiel.getGefahrenkartenAblageStapel().getAnzahl()));
		lebenLabel.setText("Leben: "+Integer.toString(spiel.getLebenspunkte())+"/"+Integer.toString(spiel.getMaxLebenspunkte()));
		rundeLabel.setText(spiel.getRunde()+"/3");
		int abziehen = 0;
		if (!spiel.getKostenfreieKartenKarteArrayList().isEmpty()){
			for(int i = 0; i<(spiel.getKostenfreieKartenKarteArrayList().size());i++){
				if (spiel.getKostenfreieKartenKarteArrayList().get(i).getTitel() == "ängstlich"){
					for(int j = 0;j<(spiel.getKostenfreieKartenKarteArrayList().size());j++){
						if (abziehen <spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert()){
							abziehen = spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert();
						}
					}
					for(int j = 0; j<spiel.getZusatzKartenKarteArrayList().size();j++){
						if (abziehen <spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert()){
							abziehen = spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert();
						}
					}
				}
			}
		}
		if (!spiel.getZusatzKartenKarteArrayList().isEmpty()){
			for(int i = 0; i<(spiel.getZusatzKartenKarteArrayList().size());i++){
				if (spiel.getZusatzKartenKarteArrayList().get(i).getTitel() == "ängstlich"){
					for(int j = 0;j<(spiel.getKostenfreieKartenKarteArrayList().size());j++){
						if (abziehen <spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert()){
							abziehen = spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert();
						}
					}
					for(int j = 0; j<spiel.getZusatzKartenKarteArrayList().size();j++){
						if (abziehen <spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert()){
							abziehen = spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert();
						}
					}
				}
			}
		}
		spiel.setKampfstaerke((abziehen*-1));
		kampfstaerkeLabel.setText("Kampfstärke: "+(Integer.toString(spiel.getKampfstaerke()))+"/"+(Integer.toString(spiel.getBenoetigteKampfstaerke())));
		zusatzkartenPanel.updateUI();
		kostenloseKartenPanel.updateUI();
	}
```
In den beiden Panels am Ende werden die entsprechenden ArrayLists dann angezeigt. Ich hätte jetzt gedacht, dass mit updateUI() das Ganze funktionieren müsste. Tut es aber nicht...

Wie sollte das Ganze umgesetzt werden?

Wenn noch Code-Teile fehlen, kann ich die gerne noch einfügen, aber das ganze Spiel hat mittlerweile 50 Klassen und die Hauptklassen für Logik und Gui sind auch sehr umfangreich, deswegen will ich nicht alles auf einmal hochladen.


----------



## RalleYTN (5. Apr 2015)

Versuch es doch mit einem einfachem Array und zeig nur die Karten an die nicht null sind.


----------



## Androbin (6. Apr 2015)

Wenn du doch schon von der Methode updateUI() sprichst,
dann könntest du sie ja auch gleich mal posten, oder?


----------

