Hallo,
in diesem Beitrag http://www.java-forum.org/java-basics-anfaenger-themen/114162-repaint-launisch.html heißt es, dass das repaint mehr so einen empfehlenden Charakter an die Komponente hat.
Zu meinem Problem:
Ich habe eine Methode, die ein (erweitertes) JPanel aus einem GridLayout löscht und ein anderes an die gleiche Stelle wieder einfügt (einige kennen die Methode vll schon^^):
Das macht er auch soweit, ABER: wenn ich die Methode ausgeführt habe, ist die Stelle des neuen Panels erstmal leer, sobald ich aber z.B. die Fenstergröße ändere oder in ein anderes Panel rechtsklicke (bei links tut sich nichts) wird alles neugezeichnet, genau so wie ich es haben will.
Nur habe ich doch jede erdenkliche repaint()-Methode, die man sich vorstellen kann aufgerufen.
Woran liegts? Ich hab irgendwie das Gefühlt, dass ich dabei was ganz einfaches übersehe, aber ich komm nicht drauf...
Gruß Ro
in diesem Beitrag http://www.java-forum.org/java-basics-anfaenger-themen/114162-repaint-launisch.html heißt es, dass das repaint mehr so einen empfehlenden Charakter an die Komponente hat.
Zu meinem Problem:
Ich habe eine Methode, die ein (erweitertes) JPanel aus einem GridLayout löscht und ein anderes an die gleiche Stelle wieder einfügt (einige kennen die Methode vll schon^^):
Java:
/**
* Ändert den Typ eines Feldes
* @param f welches Feld
* @param type zu welchem Typ
*/
public void changeType(Field f, String type){
if (f==null){ //da kann man nichts machen :D
return;
}
int x = f.get_Coord_X(); //Koordinate im Array
int y = f.get_Coord_Y(); //Koordinate im Array
int index = x +this.width*y ; //Index der Component auf dem LayoutManager
if (type.toUpperCase().equals("FREE")){
fields[x][y] = new FreeField(this, x, y);
}
else if (type.toUpperCase().equals("PREDEF")){
fields[x][y] = new PredefField(this, x, y);
}
else if (type.toUpperCase().equals("DEFAULT")){
fields[x][y] = new Field(this, x, y);
}
else {
System.out.println("No type to change found...");
}
//Lösche das eine Element
this.remove(index);
//Füge es an der gleichen Stelle neu hinzu
this.add(fields[x][y],index);
//Alles neuzeichnen
fields[x][y].repaint();
this.repaint();
frame.repaint();
//TODO macht er noch nicht automatisch
//Die Felder haben sich geändert, also neue Listen erstellen
this.createFieldLists();
}
Das macht er auch soweit, ABER: wenn ich die Methode ausgeführt habe, ist die Stelle des neuen Panels erstmal leer, sobald ich aber z.B. die Fenstergröße ändere oder in ein anderes Panel rechtsklicke (bei links tut sich nichts) wird alles neugezeichnet, genau so wie ich es haben will.
Nur habe ich doch jede erdenkliche repaint()-Methode, die man sich vorstellen kann aufgerufen.
Woran liegts? Ich hab irgendwie das Gefühlt, dass ich dabei was ganz einfaches übersehe, aber ich komm nicht drauf...
Gruß Ro