Hallo Zusammen,
ich erstelle in einer Methode tabelleerstellen eine Tabelle.
Hier der Code:
[Java]
public void tabelleerstellen() {
try{
Class.forName("de.root1.jpmdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jpmdbc:http://meinedaten);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM namen);
Vector data = new Vector();
// Die Titel für das Table
Vector title = new Vector();
title.add( "Vorname" );
title.add( "Name" );
title.add( "Datum" );
while(rs.next()) {
Vector rowA = new Vector();
rowA.add(rs.getString("vorname"));
rowA.add(rs.getString("name"));
rowA.add(rs.getString("date"));
data.add( rowA );
}
rs.close();
stmt.close();
con.close();
model = new DefaultTableModel(data, title);
table = new JTable(model) {
public boolean isCellEditable(int x, int y) {
return false;
}
};
ListSelectionModel selectionModel = table.getSelectionModel();
selectionModel.addListSelectionListener(this);
table.setRowSelectionAllowed(true);
selectionModel.addListSelectionListener(this);
unten = new JScrollPane(table);
unten.repaint();
addItem(unten, 0, 2, 3,1,GridBagConstraints.FIRST_LINE_START, GridBagConstraints.BOTH,150, 150,0,0);
table.setAutoCreateRowSorter(true);
table.getTableHeader().setReorderingAllowed( true );
table.getTableHeader().setResizingAllowed( true );
} catch(Exception e1){
System.out.println("Fehlermeldung: "+e1);
}
}
[/code]
Während der Ausführung wird die Tabelle in ein JScrollPane eingefügt. Dieses JScrollPane wird dann wiederum in ein JPanel eingefügt.
Bei der ersten Ausführung ist das auch kein Problem. Wenn ich nun aber während der Laufzeit neue Daten in die MySQL-Datenbank schreibe, aus der die Tabelle generiert wird und dann die Methode "tabelleerstellen" erneut aufrufe, aktualisiert er zwar optisch die Tabelle. Ich kann die letzte Zeile aber nicht anklicken.
Die einzelnen Elemente werden im Kopf der Klasse deklariert:
Bei einer Datenänderung wird der folgende Aufruf gestartet:
Woran liegt es, dass die erste Ausführung das gewünschte Ergebnis bringt, die zweite aber nur teilweise. Ich initialisiere doch die Tabelle, das Model und das JScrollPane jeweils neu bei jedem Methodenaufruf.
Ist das falsch?
Viele Grüße,
Sebix
ich erstelle in einer Methode tabelleerstellen eine Tabelle.
Hier der Code:
[Java]
public void tabelleerstellen() {
try{
Class.forName("de.root1.jpmdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jpmdbc:http://meinedaten);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM namen);
Vector data = new Vector();
// Die Titel für das Table
Vector title = new Vector();
title.add( "Vorname" );
title.add( "Name" );
title.add( "Datum" );
while(rs.next()) {
Vector rowA = new Vector();
rowA.add(rs.getString("vorname"));
rowA.add(rs.getString("name"));
rowA.add(rs.getString("date"));
data.add( rowA );
}
rs.close();
stmt.close();
con.close();
model = new DefaultTableModel(data, title);
table = new JTable(model) {
public boolean isCellEditable(int x, int y) {
return false;
}
};
ListSelectionModel selectionModel = table.getSelectionModel();
selectionModel.addListSelectionListener(this);
table.setRowSelectionAllowed(true);
selectionModel.addListSelectionListener(this);
unten = new JScrollPane(table);
unten.repaint();
addItem(unten, 0, 2, 3,1,GridBagConstraints.FIRST_LINE_START, GridBagConstraints.BOTH,150, 150,0,0);
table.setAutoCreateRowSorter(true);
table.getTableHeader().setReorderingAllowed( true );
table.getTableHeader().setResizingAllowed( true );
} catch(Exception e1){
System.out.println("Fehlermeldung: "+e1);
}
}
[/code]
Während der Ausführung wird die Tabelle in ein JScrollPane eingefügt. Dieses JScrollPane wird dann wiederum in ein JPanel eingefügt.
Bei der ersten Ausführung ist das auch kein Problem. Wenn ich nun aber während der Laufzeit neue Daten in die MySQL-Datenbank schreibe, aus der die Tabelle generiert wird und dann die Methode "tabelleerstellen" erneut aufrufe, aktualisiert er zwar optisch die Tabelle. Ich kann die letzte Zeile aber nicht anklicken.
Die einzelnen Elemente werden im Kopf der Klasse deklariert:
Java:
JTable table;
JScrollPane unten;
DefaultTableModel model;
Bei einer Datenänderung wird der folgende Aufruf gestartet:
Java:
tabelleerstellen();
unten.validate();
unten.repaint();
Woran liegt es, dass die erste Ausführung das gewünschte Ergebnis bringt, die zweite aber nur teilweise. Ich initialisiere doch die Tabelle, das Model und das JScrollPane jeweils neu bei jedem Methodenaufruf.
Ist das falsch?
Viele Grüße,
Sebix