首页 文章

将Checkbox添加到Table组件中的CodenameOne TableModel

提问于
浏览
3

你能告诉我我是不是应该这样做吗?我需要在我的数据行上的最后一个单元格中创建一个复选框,该复选框绑定到一个对象,当单击删除按钮时,该对象将从列表中删除 . 当我在代码中手动创建TableModel并添加一个复选框时,它在单元格中呈现为对象的“to-string”而不是实际的复选框 .

所以问题是:还有另一种方法可以将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

我能做些什么来帮助表识别并将布尔值渲染为复选框?

1 回答

  • 1

    试试这个:

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

    该模型包含数据,因此将数据设置为 boolean 将在表格单元格中隐式格式化 . 你应该 not 混合模型和视图( CheckBox 是视图)

相关问题