Hallo,
ich hab folgendes Problem:
Ich hab eine JTable mit einem eigenen Renderer für den Header, weil ich dort vertikale Spaltenüberschriften nutze. Die Spaltenbreite meiner Tabelle berechne ich "dynamisch" (derzeit mehr oder weniger ;-)).
Wenn ich das Panel mit der JTable neu aufrufe, funktioniert auch alles.
Jetzt können sich die Daten (Zeilen- und Spaltenüberschriften) der Tabelle allerdings ändern, also habe ich einen TableModelListener auf die JTable registriert und in tableChanged() wird das measureColumns() aufgerufen. Problem ist: die Spalten nehmen irgendeinen Default-Wert an und nicht den berechneten Wert aus measureColumns(). Auch wenn ich jetzt wieder zu den ursprünglichen Daten gehe, sind die Spaltenbreiten nicht mehr korrekt. Hat jemand 'ne Ahnung, was ich falsch mache?
ich hab folgendes Problem:
Ich hab eine JTable mit einem eigenen Renderer für den Header, weil ich dort vertikale Spaltenüberschriften nutze. Die Spaltenbreite meiner Tabelle berechne ich "dynamisch" (derzeit mehr oder weniger ;-)).
Java:
private void measureColumns() {
TableColumnModel columns = table.getTableHeader().getColumnModel();
int maxHeight = 0;
//TODO: Dynamisch ermitteln, zurzeit Annahme, dass in jeder Zelle x steht
String mark = "x";
for(int c = 0; c < columns.getColumnCount(); ++c) {
TableColumn column = columns.getColumn(c);
int modelColumn = table.convertColumnIndexToModel(c);
if(modelColumn < model.getColumnCount()) {
[...]
column.setPreferredWidth(mark.length() * 8);
}
}
table.getTableHeader().setPreferredSize(new Dimension(table.getColumnModel().getTotalColumnWidth(), maxHeight));
}
Wenn ich das Panel mit der JTable neu aufrufe, funktioniert auch alles.
Jetzt können sich die Daten (Zeilen- und Spaltenüberschriften) der Tabelle allerdings ändern, also habe ich einen TableModelListener auf die JTable registriert und in tableChanged() wird das measureColumns() aufgerufen. Problem ist: die Spalten nehmen irgendeinen Default-Wert an und nicht den berechneten Wert aus measureColumns(). Auch wenn ich jetzt wieder zu den ursprünglichen Daten gehe, sind die Spaltenbreiten nicht mehr korrekt. Hat jemand 'ne Ahnung, was ich falsch mache?