samedi 14 mars 2015

Fragen zur Gui-Aktualisierung

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:


Java Code:






  1. void spielGuiAktualisieren() {



  2. abwurfstapelLabel.setText("Abwurfstapel: "+Integer .toString(spiel.getZerstoerteKampfkarten().getAnzahl())+" Karten");



  3. robinsonstapelLabel.setText("Kampfkartenstapel: "+Integer .toString(spiel.getKampfkartenStapel().getAnzahl())+"/"+Integer .toString(spiel.getKampfkartenStapel().getAnzahl()+spiel.getKampfkartenAblageStapel().getAnzahl()));



  4. gefahrenstapelLabel.setText("Gefahrenkartenstapel: "+Integer .toString(spiel.getGefahrenkartenStapel().getAnzahl())+"/"+Integer .toString(spiel.getGefahrenkartenStapel().getAnzahl()+spiel.getGefahrenkartenAblageStapel().getAnzahl()));



  5. lebenLabel.setText("Leben: "+Integer .toString(spiel.getLebenspunkte())+"/"+Integer .toString(spiel.getMaxLebenspunkte()));



  6. rundeLabel.setText(spiel.getRunde()+"/3");



  7. int abziehen = 0;



  8. if (!spiel.getKostenfreieKartenKarteArrayList().isEmpty()){



  9. for(int i = 0; i<(spiel.getKostenfreieKartenKarteArrayList().size());i++){



  10. if (spiel.getKostenfreieKartenKarteArrayList().get(i).getTitel() == "ängstlich"){



  11. for(int j = 0;j<(spiel.getKostenfreieKartenKarteArrayList().size());j++){



  12. if (abziehen <spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert()){



  13. abziehen = spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert();



  14. }



  15. }



  16. for(int j = 0; j<spiel.getZusatzKartenKarteArrayList().size();j++){



  17. if (abziehen <spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert()){



  18. abziehen = spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert();



  19. }



  20. }



  21. }



  22. }



  23. }



  24. if (!spiel.getZusatzKartenKarteArrayList().isEmpty()){



  25. for(int i = 0; i<(spiel.getZusatzKartenKarteArrayList().size());i++){



  26. if (spiel.getZusatzKartenKarteArrayList().get(i).getTitel() == "ängstlich"){



  27. for(int j = 0;j<(spiel.getKostenfreieKartenKarteArrayList().size());j++){



  28. if (abziehen <spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert()){



  29. abziehen = spiel.getKostenfreieKartenKarteArrayList().get(j).getKampfwert();



  30. }



  31. }



  32. for(int j = 0; j<spiel.getZusatzKartenKarteArrayList().size();j++){



  33. if (abziehen <spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert()){



  34. abziehen = spiel.getZusatzKartenKarteArrayList().get(j).getKampfwert();



  35. }



  36. }



  37. }



  38. }



  39. }



  40. spiel.setKampfstaerke((abziehen*-1));



  41. kampfstaerkeLabel.setText("Kampfstärke: "+(Integer .toString(spiel.getKampfstaerke()))+"/"+(Integer .toString(spiel.getBenoetigteKampfstaerke())));



  42. zusatzkartenPanel.updateUI();



  43. kostenloseKartenPanel.updateUI();



  44. }







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.





Fragen zur Gui-Aktualisierung

0 commentaires:

Enregistrer un commentaire