Licorice
Allrounder
Hallo Community,
ich möchte gerne den Spaltennamen einer JTable ändern ohne dabei das TableColumnModel der JTable zu manipulieren / komplett neu zu schreiben.
Was ich möchte:
Einzelne Spalten sollen in der Tabelle zur Laufzeit ausgeblendet oder umbenannt werden können.
Das Umbenennen realisiere ich, in dem ich auf das TableColumnModel zugreife und dort die betreffende Spalte entferne, damit nicht die Daten im TableModel gelöscht werden, sondern nur die Spalte ausgeblendet wird.
Das funktioniert auch.
Das Umbenennen der Spalten möchte ich hingegen im TableModel realisieren. (Da auf dieses Model später zugegriffen wird)
Ich habe ein eigenes Model, welches von AbstractTableModel ableitet und eine renameColumn-Methode implementiert. In dieser Methode wird ein fireTableStructureChanged() ausgelöst, das anscheinend dafür sorgt, dass auch das ColumnModel neu geschrieben wird.
Problem:
Wenn nun nach dem Umbenennen das ColumnModel neu geschrieben wird, sind alle vorher ausgeblendeten Spalten wieder sichtbar. Auch die über die GUI vorgenommene Sortierung ist natürlich weg.
Wie verhindere ich das?
Mein bisheriger Ansatz:
Ich lasse das fireTableStructureChanged() im TableModel weg und ändere den Spaltennamen zusätzlich im ColumnModel. Dann bleiben die ausgeblendeten Spalten weiterhin ausgeblendet, das Model wurde verändert und der geänderte Spaltenname ist in der GUI auch sichtbar. Allerdings finde ich diese Lösung nicht so elegant.
--
Ich hoffe mein Anliegen war verständlich. Code Beispiele gibt es gerne auf Anfrage.
ich möchte gerne den Spaltennamen einer JTable ändern ohne dabei das TableColumnModel der JTable zu manipulieren / komplett neu zu schreiben.
Was ich möchte:
Einzelne Spalten sollen in der Tabelle zur Laufzeit ausgeblendet oder umbenannt werden können.
Das Umbenennen realisiere ich, in dem ich auf das TableColumnModel zugreife und dort die betreffende Spalte entferne, damit nicht die Daten im TableModel gelöscht werden, sondern nur die Spalte ausgeblendet wird.
Das funktioniert auch.
Das Umbenennen der Spalten möchte ich hingegen im TableModel realisieren. (Da auf dieses Model später zugegriffen wird)
Ich habe ein eigenes Model, welches von AbstractTableModel ableitet und eine renameColumn-Methode implementiert. In dieser Methode wird ein fireTableStructureChanged() ausgelöst, das anscheinend dafür sorgt, dass auch das ColumnModel neu geschrieben wird.
Problem:
Wenn nun nach dem Umbenennen das ColumnModel neu geschrieben wird, sind alle vorher ausgeblendeten Spalten wieder sichtbar. Auch die über die GUI vorgenommene Sortierung ist natürlich weg.
Wie verhindere ich das?
Mein bisheriger Ansatz:
Ich lasse das fireTableStructureChanged() im TableModel weg und ändere den Spaltennamen zusätzlich im ColumnModel. Dann bleiben die ausgeblendeten Spalten weiterhin ausgeblendet, das Model wurde verändert und der geänderte Spaltenname ist in der GUI auch sichtbar. Allerdings finde ich diese Lösung nicht so elegant.
--
Ich hoffe mein Anliegen war verständlich. Code Beispiele gibt es gerne auf Anfrage.
Zuletzt bearbeitet: