java - ArrayIndexOutOfBoundsException while adding row to datamodel -


i apologize asking question that's been asked lot in various forms, have yet find complete answer works. i'm trying append row tablemodel. i've tried doing in lot of different ways run similar issues (or new , exciting ones). anyway, when try add row "arrayindexoutofboundsexception" error. i've marked line error occurs in code below. i've included errors i've seen , debugging output i've been using. i'm aware don't need extend defaulttablemodel see here, stripped down version i've been working chase bug.

exception:

exception in thread "awt-eventqueue-0" java.lang.arrayindexoutofboundsexception: 2 > 0 @ java.util.vector.insertelementat(vector.java:594) @ javax.swing.table.defaulttablemodel.insertrow(defaulttablemodel.java:374) @ javax.swing.table.defaulttablemodel.addrow(defaulttablemodel.java:350) @ javax.swing.table.defaulttablemodel.addrow(defaulttablemodel.java:361) @ smc.rolecard$1.actionperformed(rolecard.java:69) @ javax.swing.abstractbutton.fireactionperformed(abstractbutton.java:2018) @ javax.swing.abstractbutton$handler.actionperformed(abstractbutton.java:2341) @ javax.swing.defaultbuttonmodel.fireactionperformed(defaultbuttonmodel.java:402) @ javax.swing.defaultbuttonmodel.setpressed(defaultbuttonmodel.java:259) @ javax.swing.plaf.basic.basicbuttonlistener.mousereleased(basicbuttonlistener.java:252) @ java.awt.component.processmouseevent(component.java:6505) @ javax.swing.jcomponent.processmouseevent(jcomponent.java:3321) @ java.awt.component.processevent(component.java:6270) @ java.awt.container.processevent(container.java:2229) @ java.awt.component.dispatcheventimpl(component.java:4861) @ java.awt.container.dispatcheventimpl(container.java:2287) @ java.awt.component.dispatchevent(component.java:4687) @ java.awt.lightweightdispatcher.retargetmouseevent(container.java:4832) @ java.awt.lightweightdispatcher.processmouseevent(container.java:4492) @ java.awt.lightweightdispatcher.dispatchevent(container.java:4422) @ java.awt.container.dispatcheventimpl(container.java:2273) @ java.awt.window.dispatcheventimpl(window.java:2719) @ java.awt.component.dispatchevent(component.java:4687) @ java.awt.eventqueue.dispatcheventimpl(eventqueue.java:729) @ java.awt.eventqueue.access$200(eventqueue.java:103) @ java.awt.eventqueue$3.run(eventqueue.java:688) @ java.awt.eventqueue$3.run(eventqueue.java:686) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:76) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:87) @ java.awt.eventqueue$4.run(eventqueue.java:702) @ java.awt.eventqueue$4.run(eventqueue.java:700) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:76) @ java.awt.eventqueue.dispatchevent(eventqueue.java:699) @ java.awt.eventdispatchthread.pumponeeventforfilters(eventdispatchthread.java:242) @ java.awt.eventdispatchthread.pumpeventsforfilter(eventdispatchthread.java:161) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(eventdispatchthread.java:150) @ java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:146) @ java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:138) @ java.awt.eventdispatchthread.run(eventdispatchthread.java:91)

debug output:

there 2 elements in roledata roledata has 2 elements performing while loop tabledata[0][0] assigned ecc tabledata[0][1] assigned 1 performing while loop tabledata[1][0] assigned portal tabledata[1][1] assigned 2 called getcolumncount() returned 2 tabledate has 2 columns , 2 rows. called getcolumncount() returned 2 called getcolumnname() returned role called getcolumncount() returned 2 called getcolumnname() returned sort order called getcolumncount() returned 2 arg :role data: clicked on role called getcolumnclass() called getcolumnclass() called getcolumnclass() called getcolumnclass() b: there 2 rows in roletablemodel add pressed 

code:

package smc;  import java.awt.component; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.arraylist; import java.util.collections; import java.util.iterator; import java.util.vector; import javax.swing.boxlayout; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.table.defaulttablemodel;  /**  * @author larry krigbaum  */ public class rolecard {     public jpanel getrolecard()     {         final jpanel rolecard = new jpanel();         rolecard.setlayout(new boxlayout(rolecard, boxlayout.page_axis));         rolecard.setalignmentx(component.center_alignment);         jpanel role_title = new jpanel();         role_title.add(new jlabel(" "));         role_title.add(new jlabel("configure sap roles"));         role_title.add(new jlabel(" "));         rolecard.add(role_title);          final jpanel role_table = new jpanel();         string[] rolecolumnnames = {"role", "sort order"};         arraylist<role> roledata = role.loadroledata();         system.out.println("there " + roledata.size() + " elements in roledata");         //arraylist<role> roledata = null;         final roletablemodel roletablemodel = new roletablemodel(rolecolumnnames, roledata);         jtable roleedittable = new jtable(roletablemodel);         roleedittable.setautocreaterowsorter(true);         //final defaulttablemodel roletablemodel = (defaulttablemodel) roleedittable.getmodel();         //final jtable roleedittable = getroletable();         role_table.add(new jscrollpane(roleedittable));                         // scrollpane needed show headers         rolecard.add(role_table);          jpanel buttonpanel = new jpanel();         jbutton addbutton = new jbutton("add");         addbutton.setactioncommand("add");         jbutton deletebutton = new jbutton("delete");         deletebutton.setactioncommand("delete");         final jbutton cancelbutton = new jbutton("cancel");         cancelbutton.setactioncommand("cancel");         cancelbutton.setenabled(false);         buttonpanel.add(addbutton);         buttonpanel.add(deletebutton);         buttonpanel.add(cancelbutton);         rolecard.add(buttonpanel);         addbutton.addactionlistener(new actionlistener()         {             @override             public void actionperformed(actionevent e)             {                 system.out.println("b: there " + roletablemodel.getrowcount() + " rows in roletablemodel");                 system.out.println("add pressed");                 cancelbutton.setenabled(true);                 object[] newrole = null;                 roletablemodel.addrow(newrole);                 //object[] newrole = new object[] {" ", " "};                 system.out.println("a: there " + roletablemodel.getrowcount() + " rows in roletablemodel");                 //roletablemodel.setrowcount((roletablemodel.getrowcount()) + 1);                 system.out.println("b: there " + roletablemodel.getrowcount() + " rows in roletablemodel");                 roletablemodel.firetablerowsinserted(roletablemodel.getrowcount(), roletablemodel.getrowcount());                 roletablemodel.firetabledatachanged();             }         });         deletebutton.addactionlistener(new actionlistener()         {             @override             public void actionperformed(actionevent e)             {                 system.out.println("delete pressed");                 cancelbutton.setenabled(true);             }         });         cancelbutton.addactionlistener(new actionlistener()         {             @override             public void actionperformed(actionevent e)             {                 system.out.println("cancel pressed");                 cancelbutton.setenabled(false);             }         });          return rolecard;     }  class roletablemodel extends defaulttablemodel {     private string[] rolecolumnnames = {"role", "sort order"};     private object[][] tabledata;      public roletablemodel(string[] rolecolumnnames, arraylist<role> roledata)     {         system.out.println("roledata has " + roledata.size() + " elements");         tabledata = new object[roledata.size()][2];         role role = new role();          collections.sort(roledata, role.makecomparator);         iterator rolesorderbyrole = roledata.iterator();         int = 0;         while (rolesorderbyrole.hasnext())         {             system.out.println("performing while loop");             role = (role)rolesorderbyrole.next();             tabledata[i][0] = role.xrole;             system.out.println("tabledata[" + + "][0] assigned " + tabledata[i][0]);             tabledata[i][1] = role.sortorder;             system.out.println("tabledata[" + + "][1] assigned " + tabledata[i][1]);             i++;         }         system.out.println("tabledate has " + getcolumncount() + " columns , " + getrowcount() + " rows.");     }     @override     public int getcolumncount()      {         system.out.println("called getcolumncount()");         system.out.println("returned " + rolecolumnnames.length);         return rolecolumnnames.length;     }      @override     public int getrowcount()     {        if (tabledata == null)            return 0;        return tabledata.length;     }      @override     public string getcolumnname(int col)      {         system.out.println("called getcolumnname()");         system.out.println("returned " + rolecolumnnames[col]);         return rolecolumnnames[col];     }      @override     public object getvalueat(int row, int col)      {         return tabledata[row][col];     }      @override     public class getcolumnclass(int c)      {         system.out.println("called getcolumnclass()");         return getvalueat(0, c).getclass();     }      /*      * don't need implement method unless table's      * editable.      */     @override     public boolean iscelleditable(int row, int col)      {         system.out.println("called iscelleditable()");         //note data/cell address constant,         //no matter cell appears onscreen.         return true;     }      /*      * don't need implement method unless table's      * data can change.      */     @override     public void setvalueat(object value, int row, int col)     {         system.out.println("called setvalueat()");         tabledata[row][col] = value;         firetablecellupdated(row, col);     } } 

you're creating table model extending defaulttablemodel. instead of delegating methods store data, store them in separate array of data. , override methods , not others. result sometimes, methods of superclass used, try , insert data in vector held super class, , sometimes, subclass methods used , set values from/to subclass array of data.

if need define custom tablemodel implementation, either extend asbtracttablemodel, , define want, or extend defaulttablemodel don't add define field. override methods need overridden, , delegate superclass methods.

except getcolumnclass(), don't see reason override method in defaulttablemodel.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -