2013-03-29 91 views
0

我正在開發一個帶有Java swing和NetBeans的桌面應用程序 它使用帶有自定義表模型的jtable來呈現數據。 我想要顯示錶 的最小行數,以便即使當要顯示的實際行數小於最小值時,表格也應顯示其他虛擬行以組成最小數量。swing jtable默認顯示多行

下面

是代碼nippets爲表模型

public class MyTableModel extends AbstractTableModel { 

    private List<List<Object>> dataList = new ArrayList<>(); 
    private String[] header = { "ID","SUBJECT","LETTTER FROM","LETTER DATE","DATE RECEIED", 
            "REMARKS","DATE DISPATCHED","DESTINATION OFFICE"}; 


    public List<List<Object>> getDataList() { 
     return dataList; 
    } 

    public void setDataList(List<List<Object>> dataList) {  
     this.dataList = dataList; 
     fireTableDataChanged();  
     fireTableStructureChanged();   
    } 

    public void setHeader(String[] header) { 
     this.header = header; 
    } 

    public String[] getHeader() { 
     return header; 
    } 

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

    @Override 
    public int getColumnCount() { 
     return header.length; 
    } 

    @Override 
    public String getColumnName(int col) { 
    return header[col]; 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 
    return dataList.get(row).get(col); 
    } 

    @Override 
    public Class<?> getColumnClass(int column) 
     { 
      for (int row = 0; row < getRowCount(); row++) 
      { 
       Object o = getValueAt(row, column); 

       if (o != null) 
       { 
        return o.getClass(); 
       }    
      } 
      return Object.class; 
     } 
    } 

任何建議可用。

+0

UNR高興:api文檔清楚地解釋了fireXX方法之間的區別 - 您只需要一個;-) – kleopatra

回答

5

首先,你需要返回要麼minRowCount或行,這曾經是較大的數...

@Override 
public int getRowCount() { 
    return Math.max(dataList.size(), minRowCount); 
} 

然後,你需要檢查,如果一個值的請求的範圍內數據列表

@Override 
public Object getValueAt(int row, int col) { 
    Object value = null; 
    if (row < dataList.size()) { 
     value = dataList.get(row).get(col); 
    } 
    return value; 
} 

如果您打算爲表可編輯,您還需要調整isCellEditablesetValueAt方法

+0

對於解決方案它確實按預期工作 – CodeAngel