[英]How to stop JTable TableModelListener from firing or listening when specific column on table changed
我創建了一個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);
}
}
}
所以發生了什么事,我得到了一個帶有sum值的無限JOptionPane Dialog
。 我在網上進行了研究,認為在編輯后,可以通過添加view.getMyJTable().putClientProperty("terminateEditOnFocusLost", true);
來終止偵聽器view.getMyJTable().putClientProperty("terminateEditOnFocusLost", true);
沒有幫助。 我基本上只是想能夠獲得第2-5列的總和,無論這些列是否具有值,這就是為什么我將BigDecimal
初始化為ZERO
似乎在第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);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.