将复选框添加到表组件中的CodenameOne TableModel

将复选框添加到表组件中的CodenameOne TableModel

问题描述:

您能否告诉我是否应该以不同的方式做这件事?我需要将我的数据行上的最后一个单元格复制到一个对象,当单击删除按钮时,我将从列表中删除该复选框。当我在代码中手动创建TableModel并添加一个复选框时,它在单元格中呈现为对象的“to-string”而不是实际的复选框。将复选框添加到表组件中的CodenameOne TableModel

所以问题:是否有另一种方法来做到这一点,使CheckBox显示为一个实际的复选框,而不是?

String[] columnNames = {"Type","Qty","Raw TB","Usable TB","Del?"}; 
Object[][] cells = {{"TOTAL","","0","0",""},{"DD4500",1,0f,0f,new CheckBox()}}; 
Table cbSummaryTable = findSummaryTable(buildContainer); 
TableModel tableModel = new DefaultTableModel(columnNames,cells); 
cbSummaryTable.setModel(tableModel); 

Table that rendered with the code above

编辑:我想建议从@ShaiAlmog,虽然它看起来前途无量(并提醒我的东西,我看到其他地方)似乎没有工作的某些原因。该表现在只是说“真”和“假”。我也试过了一个关于重写TableModel的技巧,使单元格可编辑,但也没有帮助。

新代码:

private void clearCBSummaryTable(Container buildContainer){ 
    String[] columnNames = {"Type","Qty","Raw TB","Usable TB","Del?"}; 
    Object[][] cells = {{"TOTAL","",0f,0f,Boolean.TRUE},{"DD4500",1,0f,0f,Boolean.FALSE}}; 
    Table cbSummaryTable = findSummaryTable(buildContainer); 
    TableModel tableModel = new DefaultTableModel(columnNames,cells){ 
     @Override 
     public boolean isCellEditable(int row, int column) { 
      if (row >= 2 && column == 4){ 
       return true; 
      }else { 
       return super.isCellEditable(row, column); 
      } 
     } 
    }; 
    cbSummaryTable.setModel(tableModel); 
} 

enter image description here

什么我可以做些什么来帮助表格识别和渲染布尔的复选框?

+0

'我需要做的最后一个单元格在我的数据行的该列一个布尔值checkbox'通行证,并有TableModel的覆盖'getColumnClass'到为该列返回一个Boolean.class。请参阅http://*.com/questions/21242268/how-to-make-a-specific-jtable-boolean-column-editable – copeg

+1

[如何将复选框添加到JTABLE摆动](http:// *。 com/questions/7391877/how-to-add-checkboxes-to-jtable-swing) – copeg

+1

@copeg这是针对Codename One而不是Swing的。请参阅https://www.codenameone.com/该API与Swing非常相似,但是专为移动设计。 –

试试这个:

Object[][] cells = { 
    {"TOTAL","","0","0",Boolean.FALSE}, 
    {"DD4500",1,0f,0f,Boolean.TRUE} 
}; 

该模型包含的数据,以便设置数据的boolean表中的单元格将隐含格式化。你应该混合模型和视图(CheckBox是视图)

+0

谢谢Shai,我会尝试。模型vs视图的好处。那么如果该列是可编辑的,那么我将能够检查并取消选中,然后稍后“阅读”模型以确定选择的内容? –

+0

是的,你将能够做到这一点 –

+0

Shai,我尝试了你的建议,但我不知道我做错了什么,它呈现为一个字符串“真”或“假”。我在上面更新了我的问题,并详细说明了我的尝试。你能再看一下吗? –