我遇到了一个非常奇怪的问题。我为一张桌子写了一个模型,但大多数情况下它都很完美。当我通过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;
}
}