我有以下代码段。
int index = getEventList().indexOf(myObj);
SelectionLayer selectionLayer = getGlazedListsGridLayer()
.getBodyLayerStack().getSelectionLayer();
getNatTable().repaintCell(0,selectionLayer.getRowIndexByPosition(index));
当我运行上面显示的代码时,在我点击GUI中显示的表格后,受影响的单元格才会重新绘制。如果我注释掉该代码并使用getNatTable().refresh();
,则重新绘制,而不必先点击表格。
有没有办法重新绘制单元格,而无需单击GUI中显示的表格?我不想为一个大表调用refresh(),这个代码可能会多次执行。
答案 0 :(得分:1)
不,您不需要执行一些额外的步骤来触发重新绘制。代码中的问题是使用了错误的索引值。你有一个网格,所以第0列是NatTable透视图中的行标题。我想你想重绘身体的第一列,从NatTable的角度来看是索引1。行索引也是不正确的,因为您在SelectionLayer中计算索引但实际上需要表中的索引,如果您只有一个列标题行,则该索引至少为+1。
实际上,如果网格中有一个行标题列和一个列标题行,则代码应该通过在索引上添加1来工作。
getNatTable().repaintCell(1, selectionLayer.getRowIndexByPosition(index) + 1);