Java Custom AbstractTableModel не обновляет значения в JTable до изменения размера окна/JTable

Итак, у меня есть AbstractTableModel:

public class ClientTableModel extends AbstractTableModel {

private String[] columns = new String [] {
        "UserNames", "Passwords"
};

@Override
public int getRowCount() {
    return ServerManager.instance.allClients.size();
}

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

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

@Override
public String getColumnName(int column) {
    return columns[column];
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    Object value = "";
    Client client = ServerManager.instance.allClients.get(rowIndex);
    switch (columnIndex) {
        case 0:
            value = client.CLIENT_USERNAME;
            break;
        case 1:
            value = client.CLIENT_PASSWORD;
            break;
    }
    return value;
}
}

Когда я обновляю «allClients» новым клиентом, строка JTable с новым клиентом не появляется, пока я не изменю размер JTable.

Мне было интересно, возможно ли для JTable обновить новую строку клиента без необходимости вручную изменять размер окна, чтобы увидеть нового клиента.


person Hugh Macdonald    schedule 23.06.2015    source источник
comment
Только что попробовал перекрасить JTable, и это не решает проблему.   -  person Hugh Macdonald    schedule 23.06.2015
comment
Чтобы быстрее получить помощь, опубликуйте MCVE (минимальный полный проверяемый пример) или SSCCE (краткий, автономный, правильный пример).   -  person Andrew Thompson    schedule 23.06.2015


Ответы (1)


Я не вижу метода addRow(...) вашей модели, но я предполагаю, что вы добавляете данные в ядро ​​данных модели таблицы, синглтон ServerManager.instance.allClients, не запуская ни один из методов уведомления модели таблицы. Если это так, не делайте этого. Ядро модели должно быть частью самой вашей модели, и при каждом добавлении, удалении или изменении данных вы должны вызывать метод уведомления fireXxxx(...). Например, всякий раз, когда вы добавляете строку данных, вы должны вызывать fireTableRowsInserted(...) в своей модели, чтобы она уведомляла все таблицы, в которых она отображается.

person Hovercraft Full Of Eels    schedule 23.06.2015