当我在编辑了2列列时尝试更改其中一列数据时,我收到了stackoverflow错误。
我有3列items, quantity, price
。
我想计算物品和数量有输入时的价格。以下是我的代码: -
itemsTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
for (int i = 0; i < itemsTable.getRowCount(); i++) {
if (itemsTable.getValueAt(i, 0) != null) {
String item = itemsTable.getValueAt(i, 0).toString();
double price = Double.parseDouble(selectedItem.substring(item.indexOf("RM") + 2, item.length())); //get price from the cell
double qty = Double.parseDouble(itemsTable.getValueAt(i, 1).toString()); //get quantity from cell
itemsTable.setValueAt(price * qty, i, 2); //calculate price * qty and set price
}
}
}
});
我设置了一个将数据库数据加载到items
列的组合框和一个用于quantity
的JSpinner
我做错了什么?我是JTable的新手。
答案:(信任提图斯)
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE && e.getColumn() != 2) {
for (int i = 0; i < itemsTable.getRowCount(); i++) {
if (itemsTable.getValueAt(i, 0) != null) {
...
}
}
}
}
答案 0 :(得分:-1)
将循环限制为从e.getFirstRow()行到e.getLastRow(),并且也可能在invokeLater进程中更新价格也不会有什么坏处。但是titus一头扎进去:要停止无限级联的变更调用处理程序,这会使得调用处理程序发生变化......