使用 NatTable 的 ShowRowInViewportCommand

Using NatTable's ShowRowInViewportCommand

我尝试使用 NatTableExamples-1.4.0 并尝试将 ShowRowInViewportCommand_900_test\viewportSelection\ViewportSelectionHideShowDataLayerExample 一起使用。

我将从createExampleControl方法和overloaded onStart()方法获得的nattable对象存储如下:

@Override
public void onStart() {
        nattable.doCommand(new ShowRowInViewportCommand(nattable.getLayer(), 35));    //didn't work
        nattable.doCommand(new SelectRowsCommand(nattable.getLayer(), 0, 35, false, false)); //worked, can see the row selected after scrolling down
    }

这里 SelectRowsCommand 有效。我看到第 36 行由于索引位置转换而被选中,.

但是我在UI中没有看到ShowRowInViewportCommand的效果。我原以为应该自动看到第 36 行。

ShowRowInViewportCommandHandler到位。在调试过程中,我验证了控件到达了 ShowRowInViewportCommandHandler.doCommand 方法。

我应该怎么做才能看到自动滚动?

您的方法存在时间问题。你想让一些东西可见并滚动到那个甚至还没有被渲染的位置。应该如何在未渲染的东西上执行滚动? ShellAFTER onStart().

打开

要在启动时执行自动滚动,您需要实现一个在渲染完成后执行的侦听器,例如通过使用 PaintListener.

this.nattable.addPaintListener(new PaintListener() {

    @Override
    public void paintControl(PaintEvent e) {
        nattable.doCommand(new SelectRowsCommand(nattable, 0, 35, false, false));
        nattable.removePaintListener(this);
    }
});

顺便说一句,您甚至不需要执行 ShowRowInViewportCommand,因为 SelectRowsCommand 会自动将选定的行移动到视口中。