JTable setvalueat stackoverflow

时间:2016-05-27 14:48:12

标签: java swing jtable

当我在编辑了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的新手。

修改 enter image description here

答案:(信任提图斯)

            @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) {
                            ...
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:-1)

将循环限制为从e.getFirstRow()行到e.getLastRow(),并且也可能在invokeLater进程中更新价格也不会有什么坏处。但是titus一头扎进去:要停止无限级联的变更调用处理程序,这会使得调用处理程序发生变化......