Java表模型数据消失

时间:2017-12-05 04:16:15

标签: java

我遇到了一个非常奇怪的问题。我为一张桌子写了一个模型,但大多数情况下它都很完美。当我通过setValueAt函数更新行数据时,它可以工作,并且ArrayList中的数据会更新并完成。但是当我运行getTotalPay函数时,相同的数组为空,我得到一个空值异常。

我已经用不同的方式重写了代码,并尝试了几种不同的方法解决问题,但问题仍然存在。我知道我做错了什么我只是无法弄清问题是什么。搜索网络后没有找到解决方案,我发布了这个。

我尝试过的东西正在替换变量,将数据放入两个不同的变量中。

这是模型

public class WeeklyWagesModel extends AbstractTableModel {
    private String defaultValue = "Click to edit";
    private String[] headings = { "Date From", "Date To", "Wages", "Pay Date" };

    private ArrayList<String[]> theData = new ArrayList<String[]>();

    public WeeklyWagesModel() {
        theData.add(createDefaultRow());
    }

    @Override
    public int getColumnCount() {
        return headings.length;
    }

    public String getColumnName(int col) {
        return headings[col];
    }

    @Override
    public int getRowCount() {
        return theData.size();
    }

    @Override
    public Object getValueAt(int row, int col) {
        return theData.get(row)[col];
    }

    public boolean isCellEditable(int row, int col) {
        return true;
    }

    public void setValueAt(Object value, int row, int col) {

        theData.get(row)[col] = String.valueOf(value);

        if (row == (theData.size() - 1)) {
            theData.add(createDefaultRow());
        }

        fireTableDataChanged();
    }

    public Class<?> getColumnClass(int columnIndex) {
        return String.class;
    }

    public ArrayList<String[]> getData() {
        return theData;
    }

    public String getTotalPay() {
        System.out.println("Total Pay: " + theData.size());
        BigDecimal total = BigDecimal.ZERO;

        for (String[] eachRow : theData) {
            if (StringUtils.isNumeric(eachRow[2])) {
                total.add(new BigDecimal(eachRow[2]));
            }
        }

        return NumberFormat.getCurrencyInstance().format(total);
    }

    public String getTotalWeeks() {
        return "";
    }

    private String[] createDefaultRow() {
        String[] newRow = new String[headings.length];

        for (int i = 0; i < newRow.length; i++) {
            newRow[i] = defaultValue;
        }

        return newRow;
    }
}

0 个答案:

没有答案