gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:38:16 26 4
gpt4 key购买 nike

我创建了一个TableModelListener来监听特定的列。具体来说,列2,3,4,5。这样,当 2-5 中的任何列有值或 not 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);
}
}
}

所以发生的事情是我得到一个无限的 JOptionPane Dialog ,其中包含 sum 的值。我在线研究并认为也许编辑后我可以通过添加 view.getMyJTable().putClientProperty("terminateEditOnFocusLost", true);

来终止监听器

没有帮助。我基本上只是希望能够获得第 2-5 列的总和,无论这些列是否具有值,这就是我将 BigDecimal 初始化为 ZERO ZERO 的原因

即使在第六列,似乎也在监听表模型的变化。我不知道如何选择将应用 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);
}
}
}
}

关于java - 当表上的特定列发生更改时,如何阻止 JTable TableModelListener 触发或监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com