动态更改JTable中的列数

时间:2010-12-07 14:12:42

标签: java jtable abstracttablemodel

我有JTableTableModel扩展AbstractTableModel。我想动态设置表中的列数。我通过向名为TableModel的{​​{1}}添加属性并让column_count返回getColumnCount来实现此功能。我还添加了一个方法column_count,用于设置setColumnCount并调用column_count。不幸的是,当我运行该程序时,我不断获得fireTableStructureChanged例外。谁能告诉我我做错了什么,或者建议更好的解决方案?

这是一个堆栈跟踪:
ArrayIndexOutOfBounds

3 个答案:

答案 0 :(得分:0)

您的getValueAt()方法在哪里获取数据?如果它是一个ArrayList并且你增加了列大小,那么表将尝试从列表中获取该列并抛出异常。

如果这不是问题,请使用DefaultTableModel和DefaultTableModel.addColumn()添加列,或者确保从事件调度线程对表模型进行任何更改。

答案 1 :(得分:0)

我认为异常的原因如下:

  1. 您将内部column_count设置为+1
  2. 导致事件被触发,这将导致表格直观地更新
  3. 当JTable更新代码访问最后一列时,列模型中的内部Vector会抛出异常。
  4. 原因可能是因为DefaultTableColumnModel的底层代码不知道新列,并且其Vector未被正确更改。

    要解决此问题,您应该编写自己的自定义TableColumnModel,它可以正确处理更改的维度。

答案 2 :(得分:0)

使用已更改的setModel(tm)来调用JTable的方法TableModel 在我的案例中解决了类似的错误。