Java Custom AbstractTableModel不会更新JTable上的值,直到Window / JTable调整大小

时间:2015-06-23 02:42:46

标签: java swing jtable abstracttablemodel

所以我有我的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;
}
}

当我更新&#39; allClients&#39;除了我调整JTable的大小之外,新客户端的JTable排除了新客户端。

我想知道JTable是否有可能使用新的客户端行进行更新,而不必手动调整窗口大小以查看新客户端。

1 个答案:

答案 0 :(得分:3)

我没有看到您的模型的addRow(...)方法,但我猜测您正在将数据添加到表格模型的核心数据中,ServerManager.instance.allClients单例,而不触发任何表模型的通知方法。如果是这样,请不要这样做。模型的核心应该是模型本身的一部分,每当添加或删除或更改数据时,您必须调用fireXxxx(...)通知方法。例如,无论何时添加一行数据,都必须在模型中调用fireTableRowsInserted(...),以便通知显示它的任何表。