Canvas-Objekte aus ArrayList auf Panel zeichnen: letztes Element fehlt immer !

lcboy

Grünschnabel
Hi,

mein Programm hat eine Klasse GameField, die von Canvas erbt. Der Konstruktor erwartet zwei int-Werte. Der erste gibt die Seitenlänge an (quadratisch), der zweite den Zustand (0-2). Hier von erstelle ich nun einige Instanzen und füge sie einer ArrayList<GameField> gameFields hinzu und möchte sie anschließend aus der ArrayList dem Panel hinzu fügen.
Allerdings zeichnet er nur immer gameFields.size()-1 Elemente. Weiß jemand, was das seien könnte ?


Code:
for (int x = 0; x < columns; x++) {
				for (int y = 0; y < rows; y++) {
					if (loader.isNGAFile()) {
						GameField gf = new GameField(gameFieldLength, matrix[x][y]);
						gf.setBounds(x * gameFieldLength, y * gameFieldLength, gameFieldLength, gameFieldLength);
						gameFields.add(gf);
					} else {
						GameField gf = new GameField(gameFieldLength, 0);
						gf.setBounds(x * gameFieldLength, y * gameFieldLength, gameFieldLength, gameFieldLength);
						gameFields.add(gf);
						System.out.println("GameField " + x + "," + y + " hinzugefügt !");
					}

				}
			}

Code:
public void drawGame() {
		this.getContentPane().removeAll();
		if (fileLoaded) {
			
				for (int i = 0; i < gameFields.size(); i++) {
					getContentPane().add(gameFields.get(i));
					System.out.println("GameField Nr. " + i + " gezeichnet !");
					System.out.println("Es hat die Koordinaten: " + gameFields.get(i).getBounds());
				}
			
			
		}
		validate();
		repaint();
	}

Die beiden oben gelisteten Code-Schipsel sind in meiner Main-Class, die von JFrame erbt.

Was mich jedoch total verwundert:

In der drawGame-Methode habe ich zwei Konsolen-Ausgaben hinzugefügt, die mir belegen, dass auch das letzte GameField korrekt in der ArrayList eingebunden ist, es wird nur nicht gezeichnet.

Zum testen habe ich nun mal "for (int i = 0; i <= gameFields.size(); i++) {" anstatt "for (int i = 0; i < gameFields.size(); i++) {" geschrieben (<= anstatt <). Dies wirft natürlich eine Exception, aber alle Felder werden gezeichnet. Fange ich die Exception ab, geht es wieder nicht.

Vielen Dank schonmal im Vorraus für eure Hilfe,

lcboy
 
Ich glaube, ich hab's raus:

Anscheinend entfernt er mit dem getContentPane().removeAll() auch den Layout-Manager, den ich auff null gesetzt hatte (oder ich habe ganz vergessen, ihn zu setzen :D).

Auf jeden Fall scheint es nun zu klappen !
 

Neue Beiträge

Zurück