# JTable - TableColumnModel - TableModel



## diggaa1984 (22. Feb 2009)

hallo,

bisher hab ich mich ja mit simplen Tabellen zufrieden begeben, aber nun möchte ich doch ein wenig mehr Kontrolle darüber wie diverse Cells gerendert/editiert werden und vor allem das die Spaltenbreite bleibt auch wenn sich an der Tabellenstruktur was aendert.

So .. ein wenig rumgewühlt in der API und momentan bin ich auf folgendem Stand:

- JTable kann man ja mit nem normalen TableModel zufrieden stellen .. DefaultTableModel hält dazu Daten- sowie Spaltennamen-Vektor bereit und der Table kann das alles aus dem DefaultTableModel auslesen. Soweit so gut, das hab ich bisher auch umgesetzt (eigenes TableModel von Abstract abgeleitet mit Daten/Spaltennamenliste)

- es ist möglich vom JTable das TableColumnModel abzufragen ... das wäre ja nun indirekt im TableModel vorhanden .. bringt aber der Abfrage an sich kein Gewinn, da bei Änderungen der Spaltenstruktur ein neues TableColumnModel erzeugt wird und ich jegliche vorhandene Spalteninfos (wie zB die Breite) verliere => ergo .. brauch ich selbst ein eigenes TableColumnModel was mir diese Infos auch behält und Spaltenbreiten anpasst etc.

Das würde wiederum bedeuten das meine Spaltenliste in meinem eigenen TableModel doch dort gar nix mehr zu suchen hat, da diese Info doch nun im TableColumnModel liegt, oder?! Das wiederum heisst das ich in meinem TableModel nen Verweis auf das TableColumnModel brauche, um die ganzen Methoden à la "getColumnCount" "getColumnName" "getColumnClass" etc. durch das Model zu propagieren!?

Weiterhin brauch ich dann CellEditoren und CellRenderer für einige Spalten .. die brauche ich dann nur dem TableColumnModel zuzuspielen!?

also: 
JTable kennt TableModel und TableColumnModel (gibt nen Konstruktor der das beides aufnehmen kann)

TableModel kennt TableColumnModel um für die getColumnXXX-Methoden das richtige zurück zu geben .. weiterhin kennt es die Daten aller Row's (mit ausnahme der Spalten-reihe = row 0!?)

TableColumnModel kennt die Spaltenliste und alles was ich an CellRenderern und CellEditoren brauch

soweit korrekt?! ... das is ja schon ein kleiner Batzen Klassenabhängigkeiten der sich hier mit einmal strickt, daher die Frage ob ich das so richtig verstanden habe 

Danke schonmal


----------



## diggaa1984 (23. Feb 2009)

hm, zu spät, zu unklar ... oder einfach schon zu richtig gedacht?! 

bins gar net gewohnt, dass man hier so lange wartet auf den ersten (sinnvollen) post ^^


----------



## André Uhres (23. Feb 2009)

1234567890


----------



## diggaa1984 (23. Feb 2009)

danke für die antwort,

das mit dem Adjuster ist natürlich eine feine Sache, und ich werd das Rad wohl nicht neu erfinden 

Was die Editoren/Renderer angeht hast du natürlich recht, dies sind ja Elemente der Darstellung. Warum ich auf diese Vorstellung kam, dass das TableColumnModel diese Elemente kennt liegt an dem Bsp in der API:

[HIGHLIGHT="Java"]
	
	
	
	





```
TableColumn sportColumn = table.getColumnModel().getColumn(2);
<...>
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
```
[/HIGHLIGHT]

Hier geh ich ja über das ColumnModel um an die jeweilige Spalte zu kommen um letztendlich deren Editor zu setzen. Könnte man ja abkürzen wenn man das im ColumnModel gleich festlegt, aber rein von der Logik-Trennung seh ich ein, hat es im Model nix zu suchen  ... werde ich also auch auslagern wie im Code zu sehen (bei der Erstellung der Tabelle).

Fazit: ich benötige also kein extra Spaltenmodell, meine Spaltenbezeichnerliste bleibt doch im TableModel und Editoren und Renderer sind Freiwild und werden bei der Erstellung der Tabelle auf die jeweiligen Spalten losgelassen


----------

