2013-08-15 2 views
0

이것은 내 ClanModel 클래스입니다. 테이블은 트리 맵을 기반으로합니다.JTable 및 JModel에 문제가있다

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 창 크기를 조정할 때마다 오류가 발생합니다.

나는 그것을 해결하기 위해해야 ​​할 일에 대해 대략적인 생각을 가지고 있지만 해결하지 못했습니다.

+0

'invokeLater()'또는 'setVisible()'이 표시되지 않습니다. 귀하가 설명하는 문제를 나타내는 [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하십시오. – trashgod

+0

GUI 크기를 조정할 때 어떤 오류가 발생합니까? 또한,'JTable'이'Window'의 어딘가에 추가 된'Container'입니까? –

+1

그는 아마도 오류가 발생하지 않을 것입니다. 암시적인'repaint()'를 얻기 위해 프레임의 크기를 조절해야하는 것은 아마도 잘못된'setVisible()'때문일 것입니다. – trashgod

답변

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