使用NatTable的ShowRowInViewportCommand

时间:2016-06-29 07:16:13

标签: nattable

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

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

@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方法。

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

1 个答案:

答案 0 :(得分:0)

您的方法存在时间问题。您想要显示某些内容并滚动到尚未呈现的位置。如何在未渲染的内容上执行滚动操作? Shell已打开 AFTER 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会自动将所选行移动到视口中。