2011-08-07 50 views
2

我有兩個JTable。一個JTable中有一定數量的記錄。需要在JTable中動態添加JCheckBox

一旦加載了第一個JTable,我想加載相同數量的JCheckbox以在第二個表中創建。

我有這種情況... vl通過方法addCheckBox中的兩個表。

private void addCheckBox(JTable procTableSrc, JTable procTableCk){ 

    CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer(); 
    EachRowRenderer rowRenderer = new EachRowRenderer(); 
    int rows = procTableSrc.getRowCount(); 

    DefaultTableModel dm = (DefaultTableModel)procTableCk.getModel(); 

    Object [] data = new Object[][]{{new Boolean(false)},{new Boolean(false)}}; 

    for(int i=1; i <=rows; i++){ 
     rowRenderer.add(i, checkBoxRenderer);   
     //model.addRow(new Object []{new Boolean(false)}); 
    } 
} 

請幫我一個代碼實現。

+1

您還沒有詢問具體和可回答的問題。有什麼特別的*你需要幫助嗎?你有什麼嘗試?你卡在哪裏?你能告訴我們任何代碼嗎?告訴我們任何錯誤?請儘快解決這些問題,否則我擔心你的問題將無法回答。 –

+0

你有問題與DefalutTableModel和EachRowRenderer,那裏沒有必要爲DefalutTableModel定義CheckBoxRenderer – mKorbel

+0

請在我的答案下面看到**編輯1 **。 –

回答

5

感謝您的編輯,但您仍可能想向我們展示更多信息,並告訴我們您當前的代碼導致了哪些錯誤。

關於你的「CheckBoxRenderer」類,你不需要這個。請閱讀您可以找到的JTable教程here。在那裏你會看到你所需要做的就是重載你的表模型的getColumnClass方法來返回感興趣的列的Boolean.class以顯示覆選框。

好運。

編輯1
還什麼是「行渲染器」,並且它起什麼作用?要向JTable添加信息,您必須將行添加到其模型中,並且我沒有看到您的代碼正在執行此操作。查看DefaultTableModel API,您將在其中看到addRow(...)方法,這可能對您有很大幫助。或者用數據數組創建一個新的DefaultTableModel對象。實際上,這可能會更好,因爲您可以重寫getColumnClass()方法來爲需要展開復選框的列返回布爾值。

編輯2
另外這個不能編譯,因爲你宣佈它作爲一個維數組和初始化它作爲一個2維數組:

Object [] data = new Object[][] 

考慮執行下列操作:

  • 創建Object的2維數組並保存模型的數據。數組的第一個索引將是JTable中顯示的行數,第二個索引將是列數。
  • 用你的布爾值填充每列的位置。
  • 創建一個新的DefaultTableModel對象,該對象覆蓋getColumnClass(...)並使其返回Boolean.class用於包含布爾值且需要顯示覆選框的列。
  • 給它一個構造函數,它允許您傳遞2-D Object數組和列標題的String數組。構造函數的第一行應該是對超級構造函數的調用,並且您需要將數組參數傳遞給此調用。
  • 調用您的procTableCk對象上的setModel,傳入您剛剛創建的此模型。
+0

很好的「儘快」+1 – mKorbel

+0

儘快刪除他的編輯刪除他的問題緊迫性和儘快。 –