由于凯姆指出,这很烦人的scrollIntoView后的“scrollToRight”的效果。在我之后,凯姆的解决方案比基础解决方案提供了更好的行为,因为通常表格中的第一列更有意义。 我改进了一点他的方法,它通过在应用滚动然后滚动它之前计算左边的第一个可见列,水平滚动到我们希望可见的那一行的第一列。
最后一点:列绝对左侧是针对“51”进行测试的。这是我通过在浏览器的开发工具中查看JS值“实验性”找到的值,我认为这取决于表的样式,您可能需要更改/计算它。
代码如下:
public void scrollIntoView(T next) {
int index = datagrid.getVisibleItems().indexOf(next);
NodeList<TableCellElement> cells = datagrid.getRowElement(index).getCells();
int firstVisibleIndex = -1;
for(int i=0; i<cells.getLength() && firstVisibleIndex<0;i++)
if(UIObject.isVisible(cells.getItem(i)) && (cells.getItem(i).getAbsoluteLeft() > 51) && (cells.getItem(i).getAbsoluteTop() > 0))
firstVisibleIndex = i;
cells.getItem(firstVisibleIndex>=0? firstVisibleIndex : 0).scrollIntoView();
}
感谢您的建议。这工作正常。以下是完整的代码: dataGrid.getRowElement(dataGrid.getVisibleItems()。indexOf(MyObject))。scrollIntoView(); –