Ich habe ein spezielles TableModel für eine JTable programmiert, um ganz einfach Einträge in der Reihenfolge nach oben bzw nach unten verschieben zu können.
Das Problem dabei ist, dass die interne ArrayList des TableModel korrekt umsortiert wird, die Darstellung in der JTable jedoch extakt gleich bleibt! Auch die Methode revalidate() hilft hier nicht (Die funktioniert nur wenn Einträge hinzugefügt bzw entfernt werden)
fireTableDataChanged(); im Model
Du musst noch die TableModelEvents feuern.
[QUOTE=christoph]
Das geht wie? [/QUOTE]
mit fireTableDataChanged()
naürlich könnte man auch auf so schräge Ideen kommen, wie in einem anderen TableModel Daten zu ändern als dem, welches in der GUI angezeigt wird,
aber das wäre dann langsam Rätsel raten,
poste ein Beispielprogramm mit Ablaufbeschreibung und jeder kann den Fehler in wenigen Minuten sehen
Es gab weder einen Fehler, noch hatte die Methode fireTableDataChanged() eine Auswirkung.
So funktionierts jetzt:
private void moveUpSelectedRows() {
DynamicTableModel workModel = (DynamicTableModel) this.workTable.getModel();
int[] rows = this.workTable.getSelectedRows();
workModel.moveRowsUp( rows );
this.workTable.clearSelection();
for ( int row : rows ) {
if ( --row >= 0 )
this.workTable.addRowSelectionInterval( row, row );
}
// Tabelle neu zeichnen
workModel.fireTableRowsUpdated( 0, workModel.getRowCount() );
}```
Konnte den Code gestern nicht posten, da ich ihn nur im Büro habe. Trotzdem danke für eure Hilfe! :)
[QUOTE=christoph]Es gab weder einen Fehler, noch hatte die Methode fireTableDataChanged() eine Auswirkung.
So funktionierts jetzt:
private void moveUpSelectedRows() {
DynamicTableModel workModel = (DynamicTableModel) this.workTable.getModel();
int[] rows = this.workTable.getSelectedRows();
workModel.moveRowsUp( rows );
this.workTable.clearSelection();
for ( int row : rows ) {
if ( --row >= 0 )
this.workTable.addRowSelectionInterval( row, row );
}
// Tabelle neu zeichnen
workModel.fireTableRowsUpdated( 0, workModel.getRowCount() );
}```[/QUOTE]
Konnte den Code gestern nicht posten, da ich den Code nur im Büro habe. Trotzdem danke für eure Hilfe! :)