【问题标题】:Exception throw by my custom Add Row code我的自定义添加行代码抛出异常
【发布时间】:2012-10-17 09:24:35
【问题描述】:

在我的 jTable 中,第一列包含一个数值。当我选择“添加行”时,下一行运行此代码:

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int x = jTable1.getRowCount();
String cellValue = "";
if(x > 0){
    java.lang.Object cell = jTable1.getValueAt(x,0); 
    int a = Integer.parseInt(cell.toString());
    int b = a + 1;
    cellValue = Integer.toString(b);
}

java.lang.Object[] os = new Object[]{cellValue,"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",};
model.addRow(os);
jTable1.setModel(model);
jTable1.setAutoCreateColumnsFromModel(true);

这段代码的重点是添加一个新行,但是会填写新行的第一个值。这是关键数字。不幸的是,键数与行数无关。

当按下“添加行”的 jButton 时,它会抛出此异常。

线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException: 837 >= 837

这个数字很有意义,因为 837 是我按下按钮时 jTable 的行数。

提前感谢您的帮助。

【问题讨论】:

  • 很清楚它在说什么,它期望一个小于 837 的数字,即 836... 也是怎么回事“”,};最后。
  • 另外,它看起来是一种非常糟糕的方式来做你想做的事情 - 你使用什么 API?
  • 我是 jTables 的新手。上面的代码只是我最好的尝试。我想要做的是从 Jtable 上最后一行的第 0 列中获取值,将其加 1,然后将该值放入新行的第一列。

标签: java swing jtable


【解决方案1】:

这映射到Vector.size() 中的DefaultTableModel

int x = jTable1.getRowCount();

这映射到Vector.get(int index):

java.lang.Object cell = jTable1.getValueAt(x,0);

仔细观察Vector.get(int index)会发现:

抛出:ArrayIndexOutOfBoundsException - 索引超出范围(索引 = size())。

现在自从x == size() 抛出异常。

这应该可以解决问题:

java.lang.Object cell = jTable1.getValueAt(--x,0);

【讨论】:

  • 谢谢!我会试试这个。
猜你喜欢
  • 2011-10-06
  • 2013-08-08
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2020-08-03
相关资源
最近更新 更多