我在发布更新之前测试了我的应用,发现了一些我真正不了解的内容:
我的一个表单包括一个带有纵切效果的可编辑Table
和一个自定义TableModel
,它几乎是DefaultTableModel
的副本(需要访问私有字段)。几周前一切都很好。
现在我的第二列被createCell
覆盖的方法忽略了。我在方法的开头放了一个日志,显示了值,行和列,第1列只在构建列标题时触发了它。所有其他列都会触发日志,但不会触发列1。
是否有任何可能导致此行为的想法?
提前致谢。
编辑:这是覆盖的createCell代码:
@Override
protected Component createCell(Object value, int row, int column, boolean editable) {
Component cell;
Log.p("Table CreateCell "+ row + " " + column + " " + value + " " + editable);
if(editable && (column == 1 || column == 2 || column == 3) && row != -1)
{
//Table is editable
Component TA = new TextArea(value.toString());
TA.setUIID(CerebroMobileTheme.LABEL);
((TextArea)TA).setEditable(DocFormLineTable.this.editable);
TA.setEnabled(DocFormLineTable.this.editable);
if(column == 1) //Quantity cells
((TextArea)TA).setHint("Qtty");
if(column == 2) //Description cells
((TextArea)TA).setHint("Description");
if(column == 3)
{
//Third columns cells are confirm buttons
TA = new Button("");
TA.setUIID("BlueButton");
FontImage.setMaterialIcon((Button)TA, FontImage.MATERIAL_CHECK);
((Button)TA).addActionListener(e-> {
//Similar code is used at the closing of the form to save data
//DocFormLine is a line of data for our document
DocFormLine dfl = (DocFormLine)value;
dfl.setDescription(((TextArea)((TableLayout)this.getLayout()).getComponentAt(row+1, 2)).getText());
dfl.setQtty(Double.parseDouble(((TextArea)((TableLayout)this.getLayout()).getComponentAt(row+1, 1)).getText()));
//Call our rest service to save the data serverside
RestManager.saveDocFormLine(dfl);
});
}
cell = TA;
}
else
{
//If non editable or title or first columns(non editable field), cell set to a SpanLabel
cell = new SpanLabel((String)value);
cell.setUIID("label");
if(column == 3)
cell = new Label("");
}
}
以下是创建表的日志结果:
[EDT] 0:0:21,387 - Table CreateCell -1 0 Produit false
[EDT] 0:0:21,388 - Table CreateCell -1 1 Qtty false
[EDT] 0:0:21,388 - Table CreateCell -1 2 Utilisation false
[EDT] 0:0:21,388 - Table CreateCell -1 3 false
[EDT] 0:0:21,388 - Table CreateCell 0 0 Main d'oeuvre et déplacements true
[EDT] 0:0:21,388 - Table CreateCell 0 2 true
[EDT] 0:0:21,388 - Table CreateCell 0 3 ***.entities.DocFormLine@6ac641c6 true
[EDT] 0:0:21,391 - Table CreateCell 1 0 Main d'oeuvre et déplacements true
[EDT] 0:0:21,391 - Table CreateCell 1 2 true
[EDT] 0:0:21,391 - Table CreateCell 1 3 ***.entities.DocFormLine@69cdb35a true
在Log的帮助下,我确定第1列只在创建列标题时触发createCell方法。
答案 0 :(得分:0)
如果值为null,我没有看到任何阻止创建单元格的代码。但也许它会创建一个空白标签然后隐藏。尝试做这样的事情:
protected Component createCell(Object value, int row, int column, boolean editable) {
// initialize the cell... all of your current code
if(cell instanceof Label) {
((Label)cell).setShowEvenIfBlank(true);
}
return cell;
}