2010-03-13 58 views
2

我不能把jChceckBox放到jTable單元格中。更有可能我可以把checkBox放到表中,但是當我使用該表運行模塊時,應該是checkBox的單元格顯示文本「true」或「false」。該單元格的行爲與複選框相同,但顯示的是文本值而不是複選框。如何把jcheckbox放到表格單元格中?

這是代碼。

DefaultTableModel dm = new DefaultTableModel(); 
dm.setDataVector(new Object[][]{{"dd", "Edit", "Delete"}, 
           {"dd","Edit", "Delete"}}, 
       new Object[]{"Include","Component", "Ekvi"}); 
jTable1 = new javax.swing.JTable(); 

jTable1.setModel(dm); 


JCheckBox chBox=new JCheckBox(); 
jTable1.getColumn("Include").setCellEditor(new DefaultCellEditor(chBox)); 
jScrollPane1.setViewportView(jTable1); 

回答

1

單元格編輯器定義了根據修改其值爲你的表裏面的數據如何表現,你需要的是正確地顯示在細胞內的複選框權TableCellRenderer

final JCheckBox checkBox = new JCheckBox(); 
jTable1.getColumn("Include").setCellRenderer(new DefaultTableCellRenderer() { 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     check.setSelected(((Boolean)value).booleanValue()) ; 
     return check; 
    } 
}); 
+0

-1,不需要創建自定義渲染器。 JTable已經爲布爾值提供了默認的渲染器和編輯器。 – camickr 2010-03-13 21:55:00

+1

是的,但這樣你就明白它是如何工作的。換句話說,你只需要解決這個具體問題而不需要更多的知識。 – Jack 2010-03-13 22:07:48

+0

@Jack:您的觀點有其優點,您的示例與提問者的用法相符;但@camickr提到的教程提供了一種更通用的方法。您可能會添加對答案的引用。 http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#editrender – trashgod 2010-03-14 01:41:49

5

閱讀的JTable API,並按照「如何使用表」的Swing教程的鏈接進行操作。

基本上你將布爾值存儲在TableModel中,然後重載getColumnClass()方法來返回每個colulmn的類,並且該表將選擇相應的渲染器和編輯器。

相關問題