簡體   English   中英

當表上的特定列更改時,如何阻止JTable TableModelListener觸發或偵聽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM