Расширение AbstractTableModel без обновления содержимого ячейки в JTable

Может ли кто-нибудь показать мне, почему мой 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);
    }
}

person user2143292    schedule 01.04.2013    source источник
comment
Я не вижу вашей реализации getColumnClass(). Измените свой вопрос, включив в него sscce, который указывает на описанную вами проблему.   -  person trashgod    schedule 01.04.2013


Ответы (1)


Если вы обновляете строку в JTable и явно используете setValueAt вместо простого изменения значения в data. И если вы добавляете новые данные в JTable, то создайте метод в TableModel И воссоздайте новый массив данных с размером на 1 больше, чем существующий, заполните его старыми данными, а затем добавьте в него новые данные. А потом стрелять fireTableRowsInserted(int firstRow, int lastRow)

person Vishal K    schedule 01.04.2013