Reputation: 1
I'm quite new to Java and Swing.
In my GUI I use a JTable-Control to display data from a HSQLDB-Database. I walk along the following path:
Code
public CreateTableModel(ResultSet rec) {
// Parameter übernehmen
this.rec = rec;
// Meta-Daten ermitteln
try {
mDaten = rec.getMetaData();
// Spaltenanzahl ermittel
colCount = mDaten.getColumnCount();
} catch (SQLException e) {
System.err.println("Konstruktor");
}
// Überschriften holen
getHeaderData();
// Tabellendaten holen
getTableData();
// Tabellenmodell erstellen
modell.setDataVector(daten, ueberschriften);
}
The getHeaderData()-Method looks like this:
private void getHeaderData() {
try {
for (int i = 1; i <= colCount; i++) {
ueberschriften.add(mDaten.getColumnName(i));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
And the getTableData()-method:
private void getTableData() {
try {
while (rec.next()) {
Vector datensatz = new Vector();
for (int i = 0; i < colCount; i++) {
if (rec.getObject(i + 1) != null) {
datensatz.add(rec.getObject(i + 1));
} else {
datensatz.add("");
}
}
daten.addElement(datensatz);
}
} catch (SQLException e) {
System.err.println("Table");
}
}
Now the after a new ResultSet is created - like a new query - I'd like to reread the data-Vector by creating a new tableModel and set it. Which produces an endless error-list, starting with:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1280
at java.base/java.util.Vector.elementData(Vector.java:762)
at java.base/java.util.Vector.elementAt(Vector.java:500)
at java.desktop/javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:660)
at java.desktop/javax.swing.JTable.getValueAt(JTable.java:2706)
at ZkViewUi.handleSelectionEvent(ZkViewUi.java:491)
at ZkViewUi$3.valueChanged(ZkViewUi.java:348)
at java.desktop/javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:219)
at java.desktop/javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:186)
at java.desktop/javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:723)
at java.desktop/javax.swing.JTable.clearSelectionAndLeadAnchor(JTable.java:2139)
at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4375)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:297)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableStructureChanged(AbstractTableModel.java:217)
at java.desktop/javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:238)
at CreateTableModel.reReadVector(CreateTableModel.java:127)
at ZkViewUi.createRecord(ZkViewUi.java:623)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1280
at java.base/java.util.Vector.elementData(Vector.java:762)
at java.base/java.util.Vector.elementAt(Vector.java:500)
at java.desktop/javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:660)
at java.desktop/javax.swing.JTable.getValueAt(JTable.java:2706)
at ZkViewUi.handleSelectionEvent(ZkViewUi.java:491)
at ZkViewUi$3.valueChanged(ZkViewUi.java:348)
at java.desktop/javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:219)
at java.desktop/javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:186)
at java.desktop/javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:723)
at java.desktop/javax.swing.JTable.clearSelectionAndLeadAnchor(JTable.java:2139)
at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4375)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:297)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableStructureChanged(AbstractTableModel.java:217)
at java.desktop/javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:238)
at CreateTableModel.reReadVector(CreateTableModel.java:127)
at ZkViewUi.createRecord(ZkViewUi.java:623)
I also tried the following method:
public void reReadVector(ResultSet rec) {
this.rec = rec;
this.daten = new Vector();
getTableData();
modell.setDataVector(daten, ueberschriften);
}
Which I call like so:
model.reReadVector(rec.getRecordSet());
this.tblDaten.setModel(model.getModel());
Which results in the same lot of error-messages.
I'm perfectly stuck now for days, and cannot find a solution - can anybody help, please?
Upvotes: 0
Views: 225