eclipse - 以编程方式滚动 NatTable 到选定的行

标签 eclipse eclipse-rcp nattable

我有一个将 NatTable 滚动到所选行的操作。我尝试使用下面的代码片段,该代码片段部分有效

natTable.doCommand(new ShowRowInViewportCommand(
natTable.getBodyLayer().getViewportLayer(), rowPosition+delta));

如果我将增量​​值设置为 rowPosition+10,它就会起作用。但是,如果当前滚动位于表格底部,则它不会向上滚动到该行,它需要额外的滚动才能查看选择。从逻辑上讲,我需要执行 rowPosition-10 才能将滚动到正确的位置。

因此,我们需要找到滚动位置是在表格末尾还是表格开头,然后相应地设置rowPosition+10或rowPosition-10。 有没有办法找到当前滚动位置?

这类似于问题Scroll NatTable programmatically这里。不幸的是,没有声誉发表评论,因此为这个问题创建一个单独的线程。

如果有人解决了这个问题,可以发布答案,谢谢。

谢谢。

最佳答案

我刚刚遇到了与原始海报相同的情况。在玩了一段时间后我意识到 ShowRowInViewportCommand 将尽可能少地“滚动”视口(viewport)以使行可见。三个先决条件之一为真:

  • (A) 目标行已经可见(在这种情况下什么都不会发生,可见的目标行保持在原来的位置);
  • (B) 目标行位于视口(viewport)下方(在这种情况下,视口(viewport)向下滚动,以便目标行位于视口(viewport)底部)
  • (C)​​ 目标行位于视口(viewport)上方(在这种情况下,视口(viewport)向上滚动,以便目标行位于视口(viewport)顶部)。

在我的用例中,如果目标行当前不可见,我希望目标行位于视口(viewport)的中心(如果目标行可见,则位于其所在位置)。

为此,我计算了应该位于视口(viewport)顶行的对象的索引并发出 doCommand()。这对于情况 (C) 来说效果很好,但对于情况 (B) 则失败了。修复方法只是识别视口(viewport)是否要向上或向下,然后相应地计算正确的顶部或底部索引。

滚动的方向可以通过类似于以下的代码来确定(其中 dataIndex 是我想要使其可见的行(在我的基本数据集中)的索引:

int viewportPosition = bodyLayerStack.viewportLayer.getRowPositionByIndex(dataIndex);
int viewportHeight = bodyLayerStack.viewportLayer.getRowCount();
boolean isVisible = (viewportPosition >= 0) && (viewportPosition < viewportHeight);
if (!isVisible) {
        if (viewportPosition < 0) {
            /*
             * The target row is below the viewport window so we want to calculate the
             * index of the bottom of the table.
             */
            viewPortTargetPosition = dataIndex - (viewportHeight / 2) + columnHeaderLayer.getRowCount();
            viewPortTargetPosition  = Math.max(0, viewPortTargetPosition);
        }
        else {
            /*
             * The target row is above the viewport window so we want to calculate the
             * index of the top row to show in the viewport.
             */
            viewPortTargetPosition = Math.min(dataIndex + (viewportHeight / 2) - 1, bodyLayerStack.bodyDataLayer.getRowCount()-1);
        }

    natTable.doCommand(new ShowRowInViewportCommand(bodyLayerStack.viewportLayer, viewPortTargetPosition));
        return true;
}

关于eclipse - 以编程方式滚动 NatTable 到选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354237/

相关文章:

java - 无法在 Eclipse 中对 java 文件应用调试

java - RCP GUI 使用什么类型的布局

eclipse - 如何使用 SVN 删除与某个模式匹配的所有目录?

java - 如何修复Java构建路径中的SRC文件夹?

java - 如何为 Eclipse RCP 应用程序构建和交付补丁?

eclipse-plugin - 如何将Eclipse RCP 3.6项目升级到4

java - 更改 NatTable 单元格选择颜色

java - Maven NatTable 清理+安装失败

java - 如何安装和使用NatTable?

Java 我的程序的数组没有显示任何值