Java 当表上的特定列发生更改时,如何阻止JTable TableModelListener触发或侦听

Java 当表上的特定列发生更改时,如何阻止JTable TableModelListener触发或侦听,java,swing,jtable,Java,Swing,Jtable,我创建了一个TableModelListener,它监听特定的列。具体来说,第2、3、4、5列。这样,当2-5中的任何列都有值或不为null时,它将接受并将存储的值添加到BigDecimal值以获得总和。之后,我需要将第6列的值设置为第2-5列的值之和。所以我想我可以简单地收集这些值,然后如果它遇到第6列,它将设置总和 这是密码 @Override public void tableChanged(TableModelEvent e) { DefaultTableMode

我创建了一个TableModelListener,它监听特定的列。具体来说,第2、3、4、5列。这样,当2-5中的任何列都有值或不为null时,它将接受并将存储的值添加到BigDecimal值以获得总和。之后,我需要将第6列的值设置为第2-5列的值之和。所以我想我可以简单地收集这些值,然后如果它遇到第6列,它将设置总和

这是密码

@Override
    public void tableChanged(TableModelEvent e) {
        DefaultTableModel tableModel = (DefaultTableModel) e.getSource();
        if (tableModel.getRowCount() > 0) {
            for (int row = 0; row < tableModel.getRowCount(); row++) {
                BigDecimal sum = new BigDecimal(BigInteger.ZERO).setScale(2,RoundingMode.HALF_UP);
                for (int col = 0; col < tableModel.getColumnCount(); col++) {
                    if (col == 2 || col == 3 || col == 4 || col == 5) {
                        if (tableModel.getValueAt(row, col) != null) {
                            sum = sum.add(new BigDecimal(Double.parseDouble(tableModel.getValueAt(row, col).toString())));
                        }
                    } 
                }
                JOptionPane.showMessageDialog(null,"Sum: "+sum);
                tableModel.setValueAt(sum, row, 6);
            }
        }
    }
因此,我得到了一个值为sum的无限JOptionPane对话框。 我在网上进行了研究,认为也许在编辑之后,我可以通过添加view.getMyJTable.putClientPropertyterminateEditOnFocusLost来终止侦听器,没错

没有帮助。我基本上只想得到2-5列的总和,不管这些列是否有值,这就是为什么我将BigDecimal初始化为零

即使在第6列,它似乎也在侦听表模型的更改。我不知道如何选择tablechanged将应用的特定列


谢谢。

我已经解决了我的问题。很抱歉问这个问题。解决办法很简单。我做了一些研究,发现了一个叫做e.getColumn的方法

无论如何,谢谢你看我的问题

@Override
    public void tableChanged(TableModelEvent e) {
        int colChanged = e.getColumn();
        if (colChanged == 2|| colChanged == 3 || colChanged == 4 || colChanged == 5) {
            DefaultTableModel tableModel = (DefaultTableModel) e.getSource();
            if (tableModel.getRowCount() > 0) {
                for (int row = 0; row < tableModel.getRowCount(); row++) {
                    BigDecimal sum = new BigDecimal(BigInteger.ZERO).setScale(2, RoundingMode.HALF_UP);
                    for (int col = 0; col < tableModel.getColumnCount(); col++) {
                        if (col == 2 || col == 3 || col == 4 || col == 5) {
                            if (tableModel.getValueAt(row, col) != null) {
                                sum = sum.add(new BigDecimal(Double.parseDouble(tableModel.getValueAt(row, col).toString())));
                            }
                        }
                    }
                    JOptionPane.showMessageDialog(null, "Sum: " + sum);
                    tableModel.setValueAt(sum, row, 6);
                }
            }
        }
    }

不用担心,回答你的问题没问题-@Betlista谢谢。在寻求帮助之前,我尽可能地自己用尽所有可能的解决办法