Java 我应该如何使用jTable来表示对象列表?
我正在写一个曲棍球池管理程序,我很难得到一个jTable来代表我的球员名单。我有三个班,一个队,一个花名册,一个球员。该队有两名队员,一名替补队员和一名首发队员。每个花名册包含一个球员列表。玩家可以动态添加。我想要两个jTables,一个列出替补名单上的球员,另一个列出阵容名单。我制作了这个桌子模型,但我觉得我偏离了轨道:Java 我应该如何使用jTable来表示对象列表?,java,swing,jtable,Java,Swing,Jtable,我正在写一个曲棍球池管理程序,我很难得到一个jTable来代表我的球员名单。我有三个班,一个队,一个花名册,一个球员。该队有两名队员,一名替补队员和一名首发队员。每个花名册包含一个球员列表。玩家可以动态添加。我想要两个jTables,一个列出替补名单上的球员,另一个列出阵容名单。我制作了这个桌子模型,但我觉得我偏离了轨道: public class PlayerTable extends AbstractTableModel { private String[] columnNames
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();
}
}
我正在用以下命令初始化我的jTables:
jTableBench.setModel(new PlayerTable(userTeam.getBench())
我得到一个空表,但它有正确的列名。现在,当我使用
userTeam.addPlayerToBench(name, team...)
这张桌子不变。我走对了吗?这是使用表来表示这样一组对象的最佳方式吗?我如何让表格反映我对替补名单所做的更改 您的表模型需要触发事件以通知其视图模型已更改。在您的情况下,应该使用
fireTableRowsInserted(getRowCount()-1,getRowCount()-1)
。查看AbstractTableModel
的javadoc以发现可能触发哪些事件
因此,您应该使用该模型添加一个播放器。模型将向其持有的playerList中添加一名玩家,并将触发相应的事件。您的表模型需要触发事件,以通知其视图模型已更改。在您的情况下,应该使用
fireTableRowsInserted(getRowCount()-1,getRowCount()-1)
。查看AbstractTableModel
的javadoc以发现可能触发哪些事件
因此,您应该使用该模型添加一个播放器。该模型将向其保存的playerList中添加一个播放器,并触发相应的事件。允许您轻松显示自定义对象。允许您轻松显示自定义对象。是否需要在表模型中执行添加播放器操作?我已经在team类中有了这样做的逻辑,我希望在那里更新它会更新表模型中的花名册。正确的建议是ro将一些关于TableMode#fireTableXxx的方法添加到AbstractTableModel代码块中…我需要在表模型中执行Add player操作吗?我已经在team类中有了这样做的逻辑,我希望在那里更新它会更新表模型中的花名册。正确的建议是ro在AbstractTableModel代码块中添加一些关于TableMode#fireTableXxx的方法。。。