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);
我有以下代码片段。
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);