时间:2016-01-19 16:52:50

标签: java swing jtable indexoutofboundsexception

我是java的新手,因为我是vb6 presnelty的移民我将我的员工和旧设备过去15年转移到Java现在我想加载数据是我的Jtable继电器记录的数量我的意思是我想要的测试我的Jtable中的当前记录在哪里,然后将我的记录上传到该行后面我的函数在这里我使用了jtable行数,但是它给了我错误信息

public void LoadLineInJtable(){
    int RowNo= jTable1.getModel().getRowCount(); 
    jTable1.setValueAt(jTjournal_submain_no.getText(), RowNo+1, 0);
    jTable1.setValueAt(jTjournal_submain_name.getText(), RowNo+1, 1);     
}  

尝试使用上面的代码时给出了以下错误

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 9 >= 8
    at java.util.Vector.elementAt(Vector.java:470)

感谢您的意见。

2 个答案:

答案 0 :(得分:3)

您的JTable的行数是RowNum(您应该重命名rowNum以符合Java命名标准),然后尝试在尚未存在的行中设置值。理解JTable行是基于0的,就像Java数组一样,所以你不能操作rowCount-1之外的任何数据。

如果要添加一行,如果您的模型是DefaultTableModel或此类的子项,则必须使用addRow(...),否则如果您使用的话,则必须使用自己的添加行方法自定义表模型。

所以你可能想要这样的东西:

public void LoadLineInJtable(){
    // get data and put into array or Vector
    String[] dataRow = { 
        jTjournal_submain_no.getText(), 
        jTjournal_submain_name.getText() 
    };

    // get table model and cast it to a DefaultTableModel
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();

    // add row to model
    model.addRow(dataRow);
}

答案 1 :(得分:2)

使用它在表格的末尾添加一个新行:

((DefaultTableModel)jTable1.getModel()).addRow(new String[]{"column1","column2"});