重绘细胞后,NatTable是否需要手动刷新?

时间:2016-11-10 15:49:22

标签: java nattable

我有以下代码段。

    int index = getEventList().indexOf(myObj);
    SelectionLayer selectionLayer = getGlazedListsGridLayer()
       .getBodyLayerStack().getSelectionLayer();        
    getNatTable().repaintCell(0,selectionLayer.getRowIndexByPosition(index));

当我运行上面显示的代码时,在我点击GUI中显示的表格后,受影响的单元格才会重新绘制。如果我注释掉该代码并使用getNatTable().refresh();,则重新绘制,而不必先点击表格。

有没有办法重新绘制单元格,而无需单击GUI中显示的表格?我不想为一个大表调用refresh(),这个代码可能会多次执行。

1 个答案:

答案 0 :(得分:1)

不,您不需要执行一些额外的步骤来触发重新绘制。代码中的问题是使用了错误的索引值。你有一个网格,所以第0列是NatTable透视图中的行标题。我想你想重绘身体的第一列,从NatTable的角度来看是索引1。行索引也是不正确的,因为您在SelectionLayer中计算索引但实际上需要表中的索引,如果您只有一个列标题行,则该索引至少为+1。

实际上,如果网格中有一个行标题列和一个列标题行,则代码应该通过在索引上添加1来工作。

getNatTable().repaintCell(1, selectionLayer.getRowIndexByPosition(index) + 1);