我应该如何使用jTable来表示对象列表?

时间:2011-06-24 21:07:53

标签: java swing jtable

我正在编写一个曲棍球池管理器程序,我无法让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...)

表格没有变化。我在这里走在正确的轨道上吗?这是使用表来表示这样一组对象的最佳方法吗?我如何得到表格以反映我对替补阵容的变化?

2 个答案:

答案 0 :(得分:2)

Bean Table Model可让您轻松显示自定义对象。

答案 1 :(得分:1)

您的表模型需要触发事件以通知其视图模型已更改。在您的情况下,您应该使用fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1)。查看AbstractTableModel的javadoc以发现可能触发的事件。

因此,您应该使用该模型添加播放器。该模型会将玩家添加到它所持有的玩家列表中,并且还会触发相应的事件。