0

我有以下代码片段。

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

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

有没有一种方法可以重新绘制单元格而无需单击 GUI 中显示的表格?我讨厌不得不为一个可能多次执行此代码的大表调用 refresh() 。

4

1 回答 1

1

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

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

getNatTable().repaintCell(1, selectionLayer.getRowIndexByPosition(index) + 1);
于 2016-11-10T20:01:17.690 回答