扩展AbstractTableModel不更新JTable中的单元格内容

时间:2013-04-01 00:44:18

标签: java swing jtable abstracttablemodel

有人可以告诉我为什么我的JTable未使用我的模型进行更新吗?第一次出现问题,但是当我输入数组int nh, string hNam, int vh, string proc_1 , string proc_2中保存的新数据时,表格不会使用新数据进行更新。

public class TableModel extends AbstractTableModel {

    int numRows;
    String columnNames[] = {"NH", "Horse Names", "VH",
        "Proc. I", "Proc. II"};
    Object[][] myData;

    TableModel() {
        super();
        numRows = fnh;
        myData = new Object[fnh][5];

        for (int i = 0; i < fnh; i++) {
            for (int j = 0; j < 5; j++) {
                if (j == 0) {
                    myData[i][0] = (Integer) nh[i];
                } else if (j == 1) {
                    myData[i][1] = (String) hNam[i];
                } else if (j == 2) {
                    myData[i][2] = (Integer) vh[i];
                } else if (j == 3) {
                    myData[i][3] = (String) proc_1[i];
                } else {
                    myData[i][4] = (String) proc_2[i];
                }
            }
        }
    }

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

    @Override
    public int getRowCount() {
        return myData.length;
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }

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

    @Override
    public Object getValueAt(int row, int col) {

        if (col == 0) {
            return nh[row];
        } else if (col == 1) {
            return hNam[row];
        } else if (col == 2) {
            return vh[row];
        } else if (col == 3) {
            return proc_1[row];
        } else {
            return proc_2[row];
        }
    }

    @Override
    public void setValueAt(Object value, int row, int col) {
        myData[row][col] = value;
        fireTableCellUpdated(row, col);
    }
}

1 个答案:

答案 0 :(得分:1)

如果要更新JTable中的行并明确使用setValueAt而不是仅更改数据中的值。如果要向JTable添加新数据,则在TableModel中创建一个方法并重新创建大小比现有数据大1的新数据数据,用旧数据填充,然后向其中添加新数据。然后解雇fireTableRowsInserted(int firstRow, int lastRow)