Mein Problem scheint in der Sichtbarkeit der Daten innerhalb meiner verwendeten Klassen und Methoden zu liegen. Ich glaube nicht, dass es sich speziell um ein Problem der JTable handelt.
Folgendes Szenario:
Ich habe zwei Klassen, in Klasse1 wird das GUI gezeichnet und die Events bahandelt. In Klasse2 werde Datenbank-Methoden aufgerufen um Daten aus einer SQL-DB auszulesen und in einer JTable darzustellen. Klappt auch soweit ganz gut.
Wenn ich nun in Klasse2 (der Datenbank-Klasse) nach dem Befüllen der JTable mit SQL-Daten folgendes schreibe:
wird mir auch der erwartete Wert der Zeile 0, Spalte 4 wiedergegeben.
Wenn ich den selben Aufruf in meiner Eventbahandlung in der Klasse1 aufrufe kommt allerdings nicht zurück.
Die Eventbehandlung in Klasse1:
Die Methode selectData aus Klasse2:
Ich bin mir ziemlich sicher, dass es sich um einen typischen Anfängerfehler in der Deklaration der Methoden oder Ähnliches handelt. Aber leider seh ich den Fehler nicht.
Folgendes Szenario:
Ich habe zwei Klassen, in Klasse1 wird das GUI gezeichnet und die Events bahandelt. In Klasse2 werde Datenbank-Methoden aufgerufen um Daten aus einer SQL-DB auszulesen und in einer JTable darzustellen. Klappt auch soweit ganz gut.
Wenn ich nun in Klasse2 (der Datenbank-Klasse) nach dem Befüllen der JTable mit SQL-Daten folgendes schreibe:
Code:
System.out.println(datenAusgabe.getValueAt(0, 4));
wird mir auch der erwartete Wert der Zeile 0, Spalte 4 wiedergegeben.
Wenn ich den selben Aufruf in meiner Eventbahandlung in der Klasse1 aufrufe kommt allerdings nicht zurück.
Die Eventbehandlung in Klasse1:
Code:
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("SSH LOGIN")) {
try {
System.out.println(datenAusgabe.getValueAt(0, 4));
//connectHost("10.0.13.180", "ssh");
} catch (Exception ex) {
textAusgabe.append(ex.getMessage());
}
}
Die Methode selectData aus Klasse2:
Code:
public void selectData(String database, String sqlTable) {
Vector<String> spaltenNamen = new Vector<String>();
Vector<Vector> spaltenDaten = new Vector<Vector>();
try {
Statement stmt = connect.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT * FROM " + sqlTable);
ResultSetMetaData rsmd = rs.getMetaData();
int spalten = rsmd.getColumnCount();
//Spaltennamen einlesen
for (int i=1;i<=spalten;i++) {
spaltenNamen.addElement(rsmd.getColumnName(i));
//myApp.textAusgabe.append(rsmd.getColumnName(i) + "\t");
}
//Spaltendaten einlesen
while (rs.next()) {
Vector<Object> zeile = new Vector<Object>(spalten);
//myApp.textAusgabe.append("\n");
for (int i=1;i<=spalten;i++) {
zeile.addElement(rs.getObject(i));
//myApp.textAusgabe.append(rs.getString(i) + "\t");
}
spaltenDaten.addElement(zeile);
}
rs.close();
stmt.close();
myApp.textAusgabe.append("Einlesen der Tabelle "
+ sqlTable + " aus Datenbank "
+ database + " erfolgreich!\n");
} catch (Exception ex) {
myApp.textAusgabe.append("Einlesen der Tabelle "
+ sqlTable + " aus Datenbank "
+ database + " fehlgeschlagen!\n");
}
final DefaultTableModel model = new DefaultTableModel(spaltenDaten, spaltenNamen);
final JTable datenAusgabe = new JTable(model);
JScrollPane datenScroller = new JScrollPane(datenAusgabe);
myApp.splitPane.setLeftComponent(datenScroller);
myApp.splitPane.setResizeWeight(0.5);
System.out.println(datenAusgabe.getValueAt(0, 4));
}
Ich bin mir ziemlich sicher, dass es sich um einen typischen Anfängerfehler in der Deklaration der Methoden oder Ähnliches handelt. Aber leider seh ich den Fehler nicht.