jTable - ArrayIndexOutOfBoundsException



  • Ich habe eine jTable mit 3 Spalten und einer Zeile definiert und möchte gerne dynamisch neue Zeilen mit Inhalt in die Table einfügen. Jedoch erhalte ich eine ArrayIndexOutOfBoundsException, wenn mehr als eine Zeile hinzugefügt wird. Eine addRow() Funktion habe ich nicht gefunden; was muss ich machen, um eine neue Zeile zu "allokieren", was mache ich falsch?

    ListIterator iter = Src(request).listIterator();
    
                TableModel table = TestTable.getModel();
                int row = 0;
                while (iter.hasNext()) {
                    NewsClass p = (NewsClass) iter.next();
                    table.setValueAt(DateFormat.getDateTimeInstance().format(new Date()), row, 0);
                    table.setValueAt("None", row, 1);
                    table.setValueAt(p.getText(), row, 2);
                    row++;
                }
    
    java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
            at java.util.Vector.elementAt(Vector.java:427)
            at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:648)
            at stocktrade.STGui.jButton1ActionPerformed(STGui.java:273)
    

    Danke im Voraus.



  • TableModel ist nur eine Basisschnittstelle, die alle TableModel-Implementierungen erfüllen müssen. Die Methoden dienen daher in erster Linie nicht dem Benutzer zur Steuerung des TableModel sondern der JTable zum Auslesen der Model-Daten bzw. nach einem Edit der Daten auch zum Schreiben (setValueAt).

    Solltest du kein eigenes Model anführen, hält die JTable für dich ein DefaultTableModel als TableModel. Das heißt du kannst casten:

    DefaultTableModel model = (DefaultTableModel)table.getModel();
    

    und schon hast du auch addRow(), etc. zur Verfügung 🙂

    MfG SideWinder


Anmelden zum Antworten