Java 自定义 AbstractTableModel 在 Window/JTable 调整大小之前不会更新 JTable 上的值
Java Custom AbstractTableModel doesn't update values on JTable till Window/JTable resize
所以我有我的 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 是否可以更新新的客户端行,而无需我手动调整 window 的大小来查看新客户端。
我没有看到你的模型的 addRow(...)
方法,但我猜你正在向 table 模型数据的核心添加数据,即 ServerManager.instance.allClients 单例不触发任何 table 模型的通知方法。如果是这样,请不要这样做。模型的核心应该是模型本身的一部分,无论何时添加或删除或更改数据,都必须调用 fireXxxx(...) 通知方法。例如,无论何时添加一行数据,都必须在模型中调用 fireTableRowsInserted(...)
,以便它通知任何显示它的 table。
所以我有我的 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 是否可以更新新的客户端行,而无需我手动调整 window 的大小来查看新客户端。
我没有看到你的模型的 addRow(...)
方法,但我猜你正在向 table 模型数据的核心添加数据,即 ServerManager.instance.allClients 单例不触发任何 table 模型的通知方法。如果是这样,请不要这样做。模型的核心应该是模型本身的一部分,无论何时添加或删除或更改数据,都必须调用 fireXxxx(...) 通知方法。例如,无论何时添加一行数据,都必须在模型中调用 fireTableRowsInserted(...)
,以便它通知任何显示它的 table。