2015-06-16 43 views
0

我想在AbstractTableModel的表中動態添加行。行正在循環中添加。當第二行被添加時,第一行的值在表中顯示爲空。程序的設計方式使行值得到刷新,但僅供用戶查看,我如何保持表中的值,因爲它沒有被刷新爲空值。Java AbstractTableModel動態填充行

爲什麼表總是刷新第一行的表格渲染?有沒有辦法只渲染下一行而不重印第一行中已經打印的內容。

這裏是我的代碼的某些部分:

public class RunConfig extends AbstractTableModel { 


    private final LinkedList<Section> daten = new LinkedList<Section>(); 
    private String[]  header = {"Links","% N", "% M", "% H", "% S"}; 

    public RunConfig() { 

    } 

    public void addElement(Section addValue) 
    { 
     daten.add(addValue); 
     fireTableRowsInserted(daten.size()-1, daten.size()-1); 
    } 

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

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


    public Object getValueAt(int row, int col) { 
     return ((Section)daten.get(row)); 
    } 

    public int getRowCount() { 
     return daten.size(); 
    } 

    public boolean isCellEditable(int row, int col){ 
     return false; 
    } 

} 
+0

'Section'看起來像什麼?另外,'getValueAt'應該返回指定單元格(行/列)的值而不是表示行的對象... – MadProgrammer

+0

考慮提供一個[可運行示例](https://stackoverflow.com/help/mcve)其中演示你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的響應 – MadProgrammer

+0

「*爲什麼表總是刷新第一行的表格渲染?是否有方法只渲染下一行而不重印第一行中已打印的內容。」* - ' JTable'經過大量優化以減少大量行的繪製開銷。因爲這是繪畫的工作原理,所以不可能不繪製出現更新的可視區域。它試圖做的不是繪製不可見的表格區域 – MadProgrammer

回答

0

我如果應用程序對象正確管理科疑惑。請確保每個的addElement正在與部分對象的不同實例,而不是重複使用相同的對象或添加到表模型後歸零其字段:

請嘗試以下操作,以確保表獲得一個唯一的對象,永遠不會從外面修改:

public void addElement(Section addValue) { 
    Section sec = new Section(); 
    // TODO copy fields 
    daten.add(sec); 
    fireTableRowsInserted(daten.size() - 1, daten.size() - 1); 
} 
+0

所以你只是忽略傳遞給方法的東西? – MadProgrammer

+0

這是爲了測試原始代碼是否在添加後不改變對象。 –

+0

換句話說,它不會「回答」這個問題,而是要求澄清問題...... – MadProgrammer

0

因爲我無法弄清楚如何解決這個問題,我用一個簡單的DefaultTableModel代替,並採取了數據在陣列和填充表動態逐行。它也很容易。感謝您的幫助和評論。