java - StackOverflowError 由 TableModelListener 引起

标签 java swing jtable

我不确定为什么这是递归的。

jTable1.getModel().addTableModelListener(new TableModelListener() {

 public void tableChanged(TableModelEvent evt) {
  int sum = 0;
  int i=0;
  for (i =0 ; i<2; i++){
   sum = sum + Integer.parseInt(jTable1.getValueAt(0, i).toString());
  }
  jTable1.setValueAt(sum, 0, 2);
 }

}); 

异常(exception)是:(它不断重复)

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
        at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
        at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2553)
        at javax.swing.JTable.getValueAt(JTable.java:2695)
        at testprogram.guitest.TestTableModel$1.tableChanged(TestTableModel.java:63)
        at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
        at javax.swing.table.AbstractTableModel.fireTableCellUpdated(AbstractTableModel.java:259)
        at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:650)
        at javax.swing.JTable.setValueAt(JTable.java:2719)

感谢任何帮助。

最佳答案

在事件处理程序(tableChanged 方法)中,将使用 setValue 方法的代码与删除和添加监听器的代码包装起来,如下所示

public void tableChanged(TableModelEvent e) {
model.removeTableModelListener(this);
// YOUR CODE WITH setValueAt calls begins here
if (ppt == null || cantidad > ppt.getStock()) {

model.setValueAt(ppt != null ? ppt.getStock() : 0, e.getFirstRow(), 3);
}

model.setValueAt(precioUnitario * cantidad, e.getFirstRow(), 4);

// YOUR CODE with setValueAt calls ends here
model.addTableModelListener(this);
}

这将在您进行验证时暂时禁用监听器。

关于java - StackOverflowError 由 TableModelListener 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668547/

相关文章:

java - 如何使 JTable 中的列对 Swing Java 不可见

Java 链表并发修改异常

java - 将 UTC 时间戳插入 MySQL - 夏令时时区

java - 当窗口大小增加或减小时放大内容

java - JTable - 用于选择行的 ActionListener

java - JScrollpane 仅在最大化窗口后可见 Java Swing

java - 我想在可编辑 JTable 的单元格中写入时更改字体大小

java - 使用 DateTimeFormatter 获取本地特定日期

java - jsp 和 utf-8 字符

java - RowHeader 样式的表格,对 rowHeader 和数据进行排序