Hallo,
ich versuche jeweils ein eigenes TableModel und TableColumnModel zu realisieren. Kein Problem mit dem TableModel, aber sobald ein ColumnModel ins Spielkommt geht nichts mehr. Suche jetzt seit mehreren Nächten eine Lösung. (IDE ist Netbeans 6.9.1) Mittelfristiges Ziel ist, jeweils ein TableModel, ein ColumnModel und einen CellRenderer in jeweils eigener Klasse für einfache Wiederverwendung und Anpassung zu haben.
Folgender Code funktioniert, die Tabelle wird entsprechend dem Model angezeigt und befüllt,
Sobald nun das Column Model dazu kommt, (d.h. 3. Zeile aktivieren und Konstruktoraufruf in 4. Zeile anpassen) wird keine Tabelle mehr angezeigt. Auch wenn die Zeile mit 'super();' auskommentiert ist funktioniert es nicht. Der print-Befehl wird jedoch korrekt abgearbeitet, d.H. der Konstruktor wir gerufen. (Gilt auch für das TableModel)
Hier nun der Code vom ColumnModel:
Ich habe schon alles mögliche ausprobiert, (Verschieben der Models in innere Klassen, diverse Varianten der Codierung etc., leider alles ohne Erfolg. Was sich als Hinweis noch sagen läst, ist dass
egal wann und von wo es aufgerufen wird immer '0' zurückgibt, obwohl im TableModel 2 Spalten hart codiert angelegt werden.
Was mir gedanklich auch fehlt ist die eigentliche Verbindung zur Tabelle, aber es gibt auch keinen Konstruktor von DefaultColumnModel dem eine Tabelle übergeben werden kann, also muss es auch hier mit der setColumnMode() Methode getan sein. Aus dieser Überlegung resultiert auch der Ansatz mit der inneren Klasse um auf die Variablen (Tabelle) der umgebenden Klasse zugreifen zu können.
Der obige Code muss meines Erachten nach eigentlich funktional identisch mit dem DefaultColumnModel sein.
Ist aber wohl nicht so. Wer weiß hier Rat? Danke schon jetzt!
Bib
ich versuche jeweils ein eigenes TableModel und TableColumnModel zu realisieren. Kein Problem mit dem TableModel, aber sobald ein ColumnModel ins Spielkommt geht nichts mehr. Suche jetzt seit mehreren Nächten eine Lösung. (IDE ist Netbeans 6.9.1) Mittelfristiges Ziel ist, jeweils ein TableModel, ein ColumnModel und einen CellRenderer in jeweils eigener Klasse für einfache Wiederverwendung und Anpassung zu haben.
Folgender Code funktioniert, die Tabelle wird entsprechend dem Model angezeigt und befüllt,
Java:
TableModel tm = new warp.Tables.TablePanelDayViewTableModel();
//TableColumnModel tcm = new warp.Tables.TablePanelDayViewColumnModel();
dayViewTable = new javax.swing.JTable(tm); // oder (tm,tcm) vorige Zeile aktiv
dayViewTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
dayViewTable.setFillsViewportHeight(true);
dayViewTable.setMaximumSize(new java.awt.Dimension(30000, 30000));
dayViewTable.setMinimumSize(new java.awt.Dimension(10, 10));
dayViewTable.setName("dayViewTable"); // NOI18N
dayViewTable.setPreferredSize(new java.awt.Dimension(429, 768));
dayViewTable.getTableHeader().setReorderingAllowed(false);
Font f = new Font("Tahoma",Font.BOLD ,11);
dayViewTable.getTableHeader().setFont(f);
jScrollPane1.setViewportView(dayViewTable);
Sobald nun das Column Model dazu kommt, (d.h. 3. Zeile aktivieren und Konstruktoraufruf in 4. Zeile anpassen) wird keine Tabelle mehr angezeigt. Auch wenn die Zeile mit 'super();' auskommentiert ist funktioniert es nicht. Der print-Befehl wird jedoch korrekt abgearbeitet, d.H. der Konstruktor wir gerufen. (Gilt auch für das TableModel)
Hier nun der Code vom ColumnModel:
Java:
public class TablePanelDayViewColumnModel extends DefaultTableColumnModel {
public TablePanelDayViewColumnModel(){
super();
System.out.println("Column model called." );
}
}
Ich habe schon alles mögliche ausprobiert, (Verschieben der Models in innere Klassen, diverse Varianten der Codierung etc., leider alles ohne Erfolg. Was sich als Hinweis noch sagen läst, ist dass
Java:
System.out.println(" ColCount = " + dayViewTable.getColumnModel().getColumnCount());
egal wann und von wo es aufgerufen wird immer '0' zurückgibt, obwohl im TableModel 2 Spalten hart codiert angelegt werden.
Was mir gedanklich auch fehlt ist die eigentliche Verbindung zur Tabelle, aber es gibt auch keinen Konstruktor von DefaultColumnModel dem eine Tabelle übergeben werden kann, also muss es auch hier mit der setColumnMode() Methode getan sein. Aus dieser Überlegung resultiert auch der Ansatz mit der inneren Klasse um auf die Variablen (Tabelle) der umgebenden Klasse zugreifen zu können.
Der obige Code muss meines Erachten nach eigentlich funktional identisch mit dem DefaultColumnModel sein.
Ist aber wohl nicht so. Wer weiß hier Rat? Danke schon jetzt!
Bib
Zuletzt bearbeitet: