repaintCell 后 NatTable 是否需要手动刷新?

Does NatTable need a manual refresh after repaintCell?

我有以下代码片段。

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

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

有没有一种方法可以在不单击 GUI 中显示的 table 的情况下重新绘制单元格?我不想为大型 table 调用 refresh() ,其中此代码可能会执行多次。

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

实际上,如果网格中有一行 header 列和一列 header 行,您的代码应该通过在索引上加 1 来工作。

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