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 ?
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
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