添加到JTable中的特定单元格会抛出java.lang.ArrayIndexOutOfBoundsException:4>;=0

添加到JTable中的特定单元格会抛出java.lang.ArrayIndexOutOfBoundsException:4>;=0,java,swing,jtable,Java,Swing,Jtable,java.lang.ArrayIndexOutOfBoundsException:4>=0异常 我创建了一个方法,将对象添加到JTable中的特定单元格中 它引发了java.lang.ArrayIndexOutOfBoundsException:4>=0异常 这些是我代码的一部分 //creating a JTable and a table model horaireTable = new JTable(); modelHT = new DefaultTableMode

java.lang.ArrayIndexOutOfBoundsException:4>=0异常

我创建了一个方法,将对象添加到JTable中的特定单元格中 它引发了java.lang.ArrayIndexOutOfBoundsException:4>=0异常

这些是我代码的一部分

    //creating a JTable and a table model
    horaireTable = new JTable();
    modelHT = new DefaultTableModel();
    modelHT.setColumnIdentifiers(rowHead);
    horaireTable.setModel(modelHT);
    horaireTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    horaireTable.getColumnModel().getColumn(0).setMinWidth(106);
    horaireTable.getColumnModel().getColumn(1).setMinWidth(107);
    horaireTable.getColumnModel().getColumn(2).setMinWidth(106);
    horaireTable.getColumnModel().getColumn(3).setMinWidth(107);
    horaireTable.getColumnModel().getColumn(4).setMinWidth(106);
    horaireTable.getColumnModel().getColumn(5).setMinWidth(107);
    horaireTable.getColumnModel().getColumn(6).setMinWidth(106);

    JScrollPane paneHT = new JScrollPane(horaireTable);

    paneHT.setPreferredSize(new Dimension(750, 130));

    //getting data to add
    int j,s;

    j = listJours.getSelectedIndex();  //listJours and listSeance are two 
    s = listSeance.getSelectedIndex(); // Jlists containing strings
    String h ="exemple";

    //adding to the table
    modelHT.setValueAt(h,s,j);
我得到的结果是java.lang.ArrayIndexOutOfBoundsException:4>=0异常

我得到的结果是java.lang.ArrayIndexOutOfBoundsException:4>=0异常

您正在尝试更新TableModel中不存在的单元格

modelHT = new DefaultTableModel();
您创建了一个0行0列的空TableModel

modelHT.setColumnIdentifiers(rowHead);
然后向表中添加7个列标题,但仍有0行数据

modelHT.setValueAt(h,s,j);
如果模型中不存在单元格,则不能仅设置其值

如果要更改单元格中的数据,则数据必须存在于TableModel中

一种方法是创建一个具有定义行数和列数的TableModel:

//modelHT = new DefaultTableModel();
modelHT = new DefaultTableModel(rowHead, 5); 
这将创建一个模型,其中列数由“rowHead”变量指定,每个单元格中有5行数据,且为空值

另一种方法是首先创建一个仅定义了列的TableModel,然后根据需要动态添加数据行:

modelHT = new DefaultTableModel(rowHead, 0); 
...
modelHT.addRow(...);

似乎你试图访问一些不存在的东西。你能用一种方式发布你的代码吗?每个变量都被声明和初始化,以便其他人可以尝试。@chris01我的代码包含很多来自其他类的变量,这很难做到
有没有办法创建一个充满空值的表模型-已应答。您只需要指定上限。