Hallo zusammen,
ich habe aktuell folgendes Problem bei einer JTable:
Über einen Listener wird das Model aktualisiert. Hierbei muss auch auf Basis der Daten die Spaltenanzahl ermittelt werden.
Um dies am Ende der JTabelle mitzuteilen und sie neu zu zeichnen rufe ich im Model:
Soweit so gut. Da an einigen Columns auch Renderer hängen sollen, die Spalten jedoch erst auf Basis von neuen Daten feststehen, werden die Renderer durch einen TableColumnModelListener bei "columAdded" gesetz. Funktioniert auch prima,
Jedoch kommt es im Renderer zu Fehlern wenn hieraus der Table eine Row geholt wird, die es nicht gibt (IndexOutOfBounds). Das ist auch richtig da es diese Daten durch den listenerCall nicht mehr gibt.
Durch diverse System.out. prints konnte ich feststellen, dass diese Renderer Calls, nach dem aktualisieren der Daten, aber vor dem SwingUtilities Aufruf passieren. Da ich beides in einer Methode mache, kann ich ausschließen, dass ich hier etwas dazwischen machen.
Meine Frage ist jetzt ob ich irgendwie die Möglichkeit habe herauszufinden, wer das Repaint initial auslöst? Der StackTrace gibt mir da nichts her, weil ich da bis zur EventQueue gelange. Kann ich herausfinden, wer das Event auf die Queue packt?
Danke und viele Grüße,
ich habe aktuell folgendes Problem bei einer JTable:
Über einen Listener wird das Model aktualisiert. Hierbei muss auch auf Basis der Daten die Spaltenanzahl ermittelt werden.
Um dies am Ende der JTabelle mitzuteilen und sie neu zu zeichnen rufe ich im Model:
Java:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fireTableStructureChanged();
}
});
Soweit so gut. Da an einigen Columns auch Renderer hängen sollen, die Spalten jedoch erst auf Basis von neuen Daten feststehen, werden die Renderer durch einen TableColumnModelListener bei "columAdded" gesetz. Funktioniert auch prima,
Jedoch kommt es im Renderer zu Fehlern wenn hieraus der Table eine Row geholt wird, die es nicht gibt (IndexOutOfBounds). Das ist auch richtig da es diese Daten durch den listenerCall nicht mehr gibt.
Durch diverse System.out. prints konnte ich feststellen, dass diese Renderer Calls, nach dem aktualisieren der Daten, aber vor dem SwingUtilities Aufruf passieren. Da ich beides in einer Methode mache, kann ich ausschließen, dass ich hier etwas dazwischen machen.
Meine Frage ist jetzt ob ich irgendwie die Möglichkeit habe herauszufinden, wer das Repaint initial auslöst? Der StackTrace gibt mir da nichts her, weil ich da bis zur EventQueue gelange. Kann ich herausfinden, wer das Event auf die Queue packt?
Danke und viele Grüße,