Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何使用jTable来表示对象列表?_Java_Swing_Jtable - Fatal编程技术网

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

Java 我应该如何使用jTable来表示对象列表?,java,swing,jtable,Java,Swing,Jtable,我正在写一个曲棍球池管理程序,我很难得到一个jTable来代表我的球员名单。我有三个班,一个队,一个花名册,一个球员。该队有两名队员,一名替补队员和一名首发队员。每个花名册包含一个球员列表。玩家可以动态添加。我想要两个jTables,一个列出替补名单上的球员,另一个列出阵容名单。我制作了这个桌子模型,但我觉得我偏离了轨道: public class PlayerTable extends AbstractTableModel { private String[] columnNames

我正在写一个曲棍球池管理程序,我很难得到一个jTable来代表我的球员名单。我有三个班,一个队,一个花名册,一个球员。该队有两名队员,一名替补队员和一名首发队员。每个花名册包含一个球员列表。玩家可以动态添加。我想要两个jTables,一个列出替补名单上的球员,另一个列出阵容名单。我制作了这个桌子模型,但我觉得我偏离了轨道:

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的方法。。。