Swing JPanel nach dem einfügen neu zeichnen

Sammay

Mitglied
Um es gleich im Vorfeld abzuklären: Bin noch ein ziemlicher Frischling in der OOP, also bitte gern auf Fehler hinweisen, ich lerne gern. 🙂

zum Thema: Ich bin gerade an einem Projekt, ein Kartenspiel zu basteln.Hänge nur ein bisschen bei der Visualisierung. (Siehe unten)

Ich habe nur mit den Kartencontainern meine liebe Mühe. Wird nämlich eine Karte ausgespielt, soll sie logischerweise aus der Hand des spieler entfern werden und auf dem Spielfeld abgelegt werden.
Dazu wird das Kartenobjekt(erbt von JPanel) aus den Handkarten des Spielers entfernt und in einen anderen Vector gesteckt.
Dann soll der KartenContainer sich wieder neu aufbauen. Tut er aber nicht wirklich. Die Methode die ich verwende ist die reconstruct().
Java:
public class Cardcontainer extends JPanel {

	private static final long serialVersionUID = 1L;
	Vector<Card> cards;

	//@l: 0 = horizontales Layout, 1 = vertikales Layout
	public Cardcontainer(Player p, int lay){
		super();
		cards = p.handCards;
		if(lay==0) {
			this.setSize(600, 200);
		}
		else {
			this.setSize(200, 600);
		}
		for(int i=0;i<cards.size();i++){
			this.add(cards.get(i));	
		}
	}
	public void reconstruct(){
		this.removeAll();
		for(int i=0;i<this.cards.size();i++){
			this.add(this.cards.get(i));	
		}
		this.repaint();
	}
}

Eigentlich sollten meines Verständnisses nach keine Löcher im Layout bleiben, tun sie aber leider doch (siehe Screen).
Kann mir da jemand auf die Sprünge helfen?
Zudem fällt vielleicht auf, dass die Karte ziemlich ungünstig auf der Spielfläche plaziert ist.
Hab es mit einem BorderLayout versucht und die Karte eben WEST abgelegt, scheint er aber auch nicht wirklich zu mögen.

Vielen Dank schon mal für eure Mühe.

P.S. Ist vielleicht ungünstig, zu fragen ohne sich vorzustellen. Deshalb in die Runde: "Hallo, ich bin der Neue". 🙂

so sollte das Gui dann schematisch aussehen:
 
Zuletzt bearbeitet von einem Moderator:
Jep, hat geklappt, danke.
bitte als erledigt markieren.
Wobei mich der Grund schon auch interessiert hätte, warum es so nicht geklappt hat 🙂
 
Na worin liegt jetzt der Unterschied zwischen den Methoden
repaint() und validate().?
Sorry, dass ich es nicht klarer formuliert habe.
 
Grob gesagt wird bei validate() der Interpreter damit beauftragt, das Layout erneut auf Beschädigung oder Veränderung zu prüfen und danach die Komponente entsprechend neu zu zeichnen.
repaint() zeichnet neu (ohne zu prüfen).
 

Zurück
Oben