遇到JTable和JModel问题

时间:2013-08-15 20:34:25

标签: java swing user-interface jtable abstracttablemodel

这是我的ClanModel类。该表基于树形图。

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构造函数

clanTable = new JTable(new ClanModel(clanMembers));
panel.add(clanTable);

地图填写在正在工作的按钮按下。但是,在单击按钮之前或之后,表格不会出现。每次调整gui窗口时我都会收到错误。

我粗略地了解了修复它需要做些什么,但它还没有解决。

1 个答案:

答案 0 :(得分:1)

尝试移动setVisible(),使其在 add()pack()之后。另请参阅Initial Threads

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);
        }
    });
}