Java JTable和JModel有问题

Java JTable和JModel有问题,java,swing,user-interface,jtable,abstracttablemodel,Java,Swing,User Interface,Jtable,Abstracttablemodel,这是我的模型课。该表基于树映射 public class ClanModel extends AbstractTableModel{ private Map<Integer, ClanMember> clanMembers; private final String[] columnNames = {"Name", "Rank"}; ClanModel(Map<Integer, ClanMember> clanMembers){

这是我的模型课。该表基于树映射

public class ClanModel extends AbstractTableModel{
    private Map<Integer, ClanMember> clanMembers;
    private final String[] columnNames = {"Name", "Rank"};

    ClanModel(Map<Integer, ClanMember> clanMembers){
        this.clanMembers = clanMembers;
    }   

    @Override
    public int getRowCount() {
        return clanMembers.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public String getColumnName(int column){
        return columnNames[column]; 
    }

    @Override
    public Object getValueAt(int row, int column) {
        if(column == 0) return clanMembers.get(row).getName();
        if(column == 1) return clanMembers.get(row).getRank();
        return 1;
    }

    @Override
    public void setValueAt(Object value, int row, int column) {
        if(column == 0) clanMembers.get(row).setName((String) value);
        if(column == 1) clanMembers.get(row).setRank((Rank) value);
        fireTableCellUpdated(row, column);
    }
}
地图是用一个正在工作的按钮填充的。但是,该表在单击按钮之前或之后不会显示。每次调整gui窗口的大小时,我都会遇到一个错误


我大致知道需要做什么来修复它,但还没有解决。

尝试移动
setVisible()
,使其位于
add()
pack()
之后。另见


我没有看到
invokeLater()
setVisible()
。请编辑您的问题,以包含一个显示您描述的问题的问题。调整GUI大小时会出现什么错误?另外,
容器
中是否添加了
JTable
,在您的
窗口
中?他可能没有收到错误;必须调整帧大小以获得隐式的
repaint()
可能是由于错误的
setVisible()
造成的。
clanTable = new JTable(new ClanModel(clanMembers));
panel.add(clanTable);
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JTable table = new JTable(new ClanModel(…));
            f.add(new JScrollPane(table));
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    });
}