JTable: fireTableDataChanged

Brucks

Grünschnabel
Hallo,

Hintergrund:
Ich möchte ein kleines Programm schreiben, das ein Labyrinth simuliert, aus dem ein Roboter herausgesteuert werden muss. Dazu muss er "programmiert" werden a la "geh bis du auf eine Wand stößt".
Das Labyrinth wird übere eine JTable dargestellt, hinter der ein TableModel sitzt. Der Roboter wird einer Zelle in Form eines ImageIcons zugeordnet.

Problem:
Nach jeder Anweisung, die die Position des Roboters ändert, wird die Änderung an das TableModel gesendet. Anschließend wird mit der Methode fireTableDataChanged die JTable aufgefordert, das aktualisierte Tablemodell anzuzeigen. Funktioniert auch prächtig, solange nur eine einzige Anweisung zur Positionsänderung gegeben wird. Gibt man mehrere an, wird das TableModel zwar nach jeder einzelnen korreckt angepasst, allerdings aktualisiert das anschließende fireTableDataChanged nicht die JTable. Erst, wenn alle Anweisungen zur Positionsänderungen abgearbeitet sind, zeigt die JTable die nun aktuelle neue Endposition. Ich hätte aber gerne, dass man den Weg auch sieht, also das ImageIcon, jede Positionsänderung auf der JTabel zeigt.

Code:

public class HashTableModel extends AbstractTableModel {
...
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
String key = "[" + rowIndex + "," + columnIndex + "]";

if (aValue == null)
data.remove(key);
else
data.put(key, aValue);

this.fireTableDataChanged();
System.out.println("aktualisiere..." + aValue.getClass().getName());
try {Thread.sleep(2000);}
catch(InterruptedException e){System.out.println("Sleep Interrupted");}
System.out.println("weiter geht's...");
}
...


public class Spielfeld extends HashTableModel {
...
public void setRobot(int pRobotPosX, int pRobotPosY, ImageIcon pIcnRobot ) {
robotPosX = pRobotPosX;
robotPosY = pRobotPosY;
icnRobot = pIcnRobot;
this.setValueAt(icnRobot,robotPosY,robotPosX);
}
...
 
Zurück