Java 当表上的特定列发生更改时,如何阻止JTable TableModelListener触发或侦听
我创建了一个TableModelListener,它监听特定的列。具体来说,第2、3、4、5列。这样,当2-5中的任何列都有值或不为null时,它将接受并将存储的值添加到BigDecimal值以获得总和。之后,我需要将第6列的值设置为第2-5列的值之和。所以我想我可以简单地收集这些值,然后如果它遇到第6列,它将设置总和 这是密码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
@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谢谢。在寻求帮助之前,我尽可能地自己用尽所有可能的解决办法