DefaultTableModel.addColumn -> ArrayIndexOutOfBounceExcep

Status
Nicht offen für weitere Antworten.

root84

Mitglied
Hallo Leute,

ich habe mir eine JTable gebaut, und ihr ein DefaultTableModel zugeordnet. Das anzeigen und einfügen von Daten ist auch überhaupt kein Problem. Nun möchte ich allerdings der Tabelle eine neue Spalte geben...

Das Erstellen und erste Einfügen von Spalten, wenn die Tabelle noch leer ist, funktioniert wie folgt.


Code:
dtm = new DefaultTableModel();       
tablePlan.setModel(dtm);
dtm.addColumn("x");
dtm.addColumn("y");
dtm.addColumn("Dorfname");
dtm.addColumn("speed");
dtm.addColumn("distance");

Will ich nun (auch wenn die Tabelle noch leer ist) noch eine weitere Spalte einfügen, wirft mir Java eine ArrayIndexOutOfBounceException. Obwohl ich es genauso mache, wie vorher....

Code:
dtm.addColumn("Ziel1");


folgende Exceptions werden geworfen:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
        at java.util.Vector.elementAt(Vector.java:435)
        at javax.swing.table.DefaultTableModel.getColumnName(DefaultTableModel.java:592)
        at staemmeattack.StaemmeattackView$1.tableChanged(StaemmeattackView.java:60)
        at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
        at javax.swing.table.AbstractTableModel.fireTableStructureChanged(AbstractTableModel.java:200)
        at javax.swing.table.DefaultTableModel.addColumn(DefaultTableModel.java:540)
        at javax.swing.table.DefaultTableModel.addColumn(DefaultTableModel.java:506)
        at staemmeattack.StaemmeattackView.buttonReadTargetActionPerformed(StaemmeattackView.java:358)
        at staemmeattack.StaemmeattackView.access$900(StaemmeattackView.java:35)
        at staemmeattack.StaemmeattackView$5.actionPerformed(StaemmeattackView.java:190)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5602)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5367)
        at java.awt.Container.processEvent(Container.java:2010)
        at java.awt.Component.dispatchEventImpl(Component.java:4068)
        at java.awt.Container.dispatchEventImpl(Container.java:2068)
        at java.awt.Component.dispatchEvent(Component.java:3903)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866)
        at java.awt.Container.dispatchEventImpl(Container.java:2054)
        at java.awt.Window.dispatchEventImpl(Window.java:1791)
        at java.awt.Component.dispatchEvent(Component.java:3903)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Hat jemand eine Ahnung was daran falsch sein soll?

Gruß Ingo
 

Eminent

Bekanntes Mitglied
Ist die Klasse StaemmeattackView.java eine deiner Klassen? Wenn ja poste doch mal etwas Code darus. Vornehmlich um die Zeile 60 (StaemmeattackView.java:60).

Dort wird bei deinem tableChanced-Event die Exception verursacht würde ich schätzen.
 

root84

Mitglied
Ja, das ist eine meiner klassen.

Zeile 60 ist markiert:
Code:
tablePlan.getModel().addTableModelListener(new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
                
                if (e.getType() != 1) {
                    int row = e.getFirstRow();
                    int col = e.getColumn();
                    TableModel model = (TableModel)e.getSource();
                    String colName = model.getColumnName(col) /* Zeile 60 */
                    Object data = model.getValueAt(row, col);
 
S

SlaterB

Gast
offensichtlich ist hier
int col = e.getColumn();
gleich -1

ob das so Sinn macht oder nicht kann man ja noch weitererforschen,
eine andere Frage ist aber, ob du auf dieses addColum()-Event überhaupt derart reagieren willst?
es gibt doch keinen Wert auszulesen?
 

root84

Mitglied
Naja, wie umgehe ich denn den Listener beim Einfügen einer neuen Spalte ?
Beim Einfügen einer neuen Zeile soll der Listener nämlich die neuen Daten noch zusätzlich in einen Vector<Village> schreiben, mit dem ich dann später noch weiterarbeite.
 
S

SlaterB

Gast
schau dir doch mal e.getType() genauer an, was genau kommt da beim Einfügen einer neuen Spalte im Vergleich zu anderen Ereignissen?
(System.out.println)

und dann hast du ja noch col = -1, was auch ein Hinweis ist
 

root84

Mitglied
Aaaaah, danke :)
Hast mir sehr geholfen meine Denk-Blockade zu beenden. Das Abfangen ob col != -1 reicht aus.

Hat sich damit dann erledigt.

Geschafft :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben