Hallo allerseits,
Die Situaton:
Über eine JComboBox löse ich jeweils einen Zugriff auf
die entsprechend ausgewählte MySQL-Tabelle aus, erhalte eine ResultSet, lese es aus,
und je nach Tabelle mit entsprechende Spalten und deren Datentypen
rufe ich dann verschiedene dtm.setValueAt(...) auf einem DefaultTableModel-Objekt
namens dtm z.B.:
auf um die daten aus dem ResultSet in die JTable zu kriegen.
Mein Code, konkret setValueAt(...) Aufrufe, sind also auf die Datentypen der einzelnen Tabellen
angepasst.
Das klappt soweit gut, jedenfalls macht es einen guten Eindruck, denn die
Daten aus den verschiedenen Tabellen werden schön in die JTable eingetragen und angezeigt.
Aber die Spaltennamen bleiben konstant, also unpassend
Wie kann ich jetzt dafür sorgen, dass auch die Tabellenzeilen passen?
Ich nehme an, dass ich die auch "zu Fuss" anpassen muss!
Aber wie gehe ich da ran?
Wie aktualisiere ich jetzt am einfachsten die Tabellenzeilen?
Sind die eigentlich im ResultSet mit drin? Muss ich die da "rausholen"?
-----------------------------
Exkurs Start:
Mit dem DefaultTableModel habe ich mich schon etwas beschäftigt, aber
so ganz klar ist mir das nicht.
Generell seltsam ist es halt schon:
Es geschieht soviel implizit, also automatisch im Hintergrund, dass
es schwierig ist den Überblick zu behalten.
getColumnCount() kann auch explizit auf TabelModel-Objekt aufgerufen werden.
Aber der Aufruf ist getColumnCount() irgendwie automatisch, bzw. unsichtbar im Hintergrund:
Wenn im Programmcode nur eine DEFINITION von getColumnCount() zu finden ist und
kein expliziter Aufruf so erfolgt ein Aufruf dennoch!
Aufruf ist setValueAt(...) kann explizit auf TabelModel-Objekt aufgerufen werden.
Wird aber zusätzlich noch irgendwie automatisch, bzw. unsichtbar im Hintergrund
aufgerufen, wenn ein Wert einer Zelle geändert wird und der Mauszeiger die Zelle verlässt.
Im Programmcode nur diese DEFINITION von getColumnCount() zu finden, aber nichts
was auf einen Aufruf von setValueAt(...)hindeutet.
Exkurs Ende
-------------------------------------------
So wird das DefaultTableModel-Objekt dtm als Inner class da innerhalb ActionPerformed()
erezugt.
DefaultTableModel dtm = new DefaultTableModel(new String[] {"A","B","C","D","E","F","G"}, 2) {...}
-----------------------------------------------------------
Zur Zeit habe ich, egal welche Tabelle angezeigt wird, immer die Spalten "A","B","C","D","E","F","G.
Muss ich mit public String getColumnName(int columnIndex){ ...} etwas machen,
um die Spaltennamen der jeweils angezeigten Tabelle anzupassen?
Viele Grüße,
tsitra
Die Situaton:
Über eine JComboBox löse ich jeweils einen Zugriff auf
die entsprechend ausgewählte MySQL-Tabelle aus, erhalte eine ResultSet, lese es aus,
und je nach Tabelle mit entsprechende Spalten und deren Datentypen
rufe ich dann verschiedene dtm.setValueAt(...) auf einem DefaultTableModel-Objekt
namens dtm z.B.:
Java:
dtm.setValueAt(Integer.parseInt(rs.getString("pk_ArtId")), row, 0);
Mein Code, konkret setValueAt(...) Aufrufe, sind also auf die Datentypen der einzelnen Tabellen
angepasst.
Das klappt soweit gut, jedenfalls macht es einen guten Eindruck, denn die
Daten aus den verschiedenen Tabellen werden schön in die JTable eingetragen und angezeigt.
Aber die Spaltennamen bleiben konstant, also unpassend
Wie kann ich jetzt dafür sorgen, dass auch die Tabellenzeilen passen?
Ich nehme an, dass ich die auch "zu Fuss" anpassen muss!
Aber wie gehe ich da ran?
Wie aktualisiere ich jetzt am einfachsten die Tabellenzeilen?
Sind die eigentlich im ResultSet mit drin? Muss ich die da "rausholen"?
-----------------------------
Exkurs Start:
Mit dem DefaultTableModel habe ich mich schon etwas beschäftigt, aber
so ganz klar ist mir das nicht.
Generell seltsam ist es halt schon:
Es geschieht soviel implizit, also automatisch im Hintergrund, dass
es schwierig ist den Überblick zu behalten.
getColumnCount() kann auch explizit auf TabelModel-Objekt aufgerufen werden.
Aber der Aufruf ist getColumnCount() irgendwie automatisch, bzw. unsichtbar im Hintergrund:
Wenn im Programmcode nur eine DEFINITION von getColumnCount() zu finden ist und
kein expliziter Aufruf so erfolgt ein Aufruf dennoch!
Aufruf ist setValueAt(...) kann explizit auf TabelModel-Objekt aufgerufen werden.
Wird aber zusätzlich noch irgendwie automatisch, bzw. unsichtbar im Hintergrund
aufgerufen, wenn ein Wert einer Zelle geändert wird und der Mauszeiger die Zelle verlässt.
Im Programmcode nur diese DEFINITION von getColumnCount() zu finden, aber nichts
was auf einen Aufruf von setValueAt(...)hindeutet.
Exkurs Ende
-------------------------------------------
So wird das DefaultTableModel-Objekt dtm als Inner class da innerhalb ActionPerformed()
erezugt.
DefaultTableModel dtm = new DefaultTableModel(new String[] {"A","B","C","D","E","F","G"}, 2) {...}
-----------------------------------------------------------
Zur Zeit habe ich, egal welche Tabelle angezeigt wird, immer die Spalten "A","B","C","D","E","F","G.
Muss ich mit public String getColumnName(int columnIndex){ ...} etwas machen,
um die Spaltennamen der jeweils angezeigten Tabelle anzupassen?
Viele Grüße,
tsitra