我正在编写一个曲棍球池管理器程序,我无法让jTable代表我的球员名单。我有三个班,团队,名册和球员。球队有两个名册成员,一个替补名单和一个阵容名单。每个名单都包含一个玩家阵列列表。玩家可以动态添加。我希望有两个jTable,一个用于列出Bench Roster中的玩家,另一个用于阵容名单。我制作了这个桌子模型,但我觉得我偏离了轨道:
public class PlayerTable extends AbstractTableModel {
private String[] columnNames = {"Name", "Team", "Position", "Injured?", "Salary", "PowerRanking"};
private Roster playerList;
public PlayerTable(Roster players){
playerList = players;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return playerList.getNumPlayers();
}
public String getColumnName(int col) {
return columnNames[col];
}
public boolean addPlayer(String name, String team, int teamNumber) throws Exception{
return playerList.addPlayer(name, team, teamNumber);
}
public Object getValueAt(int row, int col) {
Object returnValue = "----";
switch (col) {
case 0:
returnValue = playerList.getPlayer(row).getName();
break;
case 1:
returnValue = playerList.getPlayer(row).getTeam();
break;
case 2:
returnValue = playerList.getPlayer(row).getPosition();
break;
case 3:
returnValue = playerList.getPlayer(row).isInjured();
break;
case 4:
returnValue = playerList.getPlayer(row).getSalary();
break;
case 5:
returnValue = playerList.getPlayer(row).getPawerRanking();
break;
}
return returnValue;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
我正在用以下内容初始化我的jTable:
jTableBench.setModel(new PlayerTable(userTeam.getBench())
我得到一个空表,但它有正确的列名。现在,当我使用
添加一名球员到替补席上时userTeam.addPlayerToBench(name, team...)
表格没有变化。我在这里走在正确的轨道上吗?这是使用表来表示这样一组对象的最佳方法吗?我如何得到表格以反映我对替补阵容的变化?
答案 0 :(得分:2)
Bean Table Model可让您轻松显示自定义对象。
答案 1 :(得分:1)
您的表模型需要触发事件以通知其视图模型已更改。在您的情况下,您应该使用fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1)
。查看AbstractTableModel
的javadoc以发现可能触发的事件。
因此,您应该使用该模型添加播放器。该模型会将玩家添加到它所持有的玩家列表中,并且还会触发相应的事件。