Helmut Seidel M.A.
Helmut Seidel M.A.

Reputation: 1

Replace Data-Vector in DefaultTableModel

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:

  1. get a ResultSet object
  2. I pass the resultset to my personal createTableModel-class in which I create a defaultTableModel (model):

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");
    }
}
  1. Finally I pass the tableModel to the UI where I set the tableModel. Everything works fine so far.

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

Answers (0)

Related Questions