【发布时间】:2017-10-10 11:13:59
【问题描述】:
如何制作一个 Nebula NatTable,其中混合了固定列和剩余的一个填充所有可用的垂直空间,以及最重要的是,用户可以调整固定宽度列的大小?
视觉示例:
+-----------------------------------------+-------+-------+
| ...fills available vert space... | 100px | 100px |
用户通过将第 0 列和第 1 列之间的边框向左推来调整中间列的大小:
+---------------------------------------+----------+-------+
| ...fills available vert space... | 120px | 100px |
用户通过将第 1 列和第 2 列之间的边框向左推来调整第 3 列的大小:
+------------------------------------+----------+----------+
| ...fills available vert space... | 120px | 120px |
我非常接近这段代码:
IRowDataProvider<String> bodyDataProvider = ...;
DataLayer bodyDataLayer = new DataLayer(bodyDataProvider);
SelectionLayer selectionLayer = new SelectionLayer(bodyDataLayer, false);
ViewportLayer viewportLayer = new ViewportLayer(selectionLayer);
bodyDataLayer.setColumnPercentageSizing(0, true);
bodyDataLayer.setColumnPositionResizable(0, true);
bodyDataLayer.setColumnWidthByPosition(1, 100);
bodyDataLayer.setColumnPositionResizable(1, true);
bodyDataLayer.setColumnWidthByPosition(2, 100);
bodyDataLayer.setColumnPositionResizable(2, true);
它在视觉上做了预期的事情,它也会对容器(Shell)按预期调整大小做出反应;即固定列保持 100px,只有第一列调整大小。到目前为止很好。但是有一个问题:列间调整大小发生了一些不好的事情。我只是反应奇怪。在第 0 列和第 1 列之间调整大小处理程序(标题边框)不做任何事情,只出现调整大小但不执行调整大小;在第 1 列和第 2 列之间调整大小的处理程序会做出反应,但只有第 1 列可以有效调整大小,第 2 列始终保持其大小,无论您做什么。
不良行为示例:您想调整第 2 列(第 3 列)的大小以使其更大;您抓住第 1 列和第 2 列之间的边界,将边界拖到 left 以通过有效地将第 1 列也向左推来使第 2 列变大。但相反,第 2 列保持不变,而第 1 列缩小!
更新
我的问题是如何实现所需的行为。我需要在哪里设置或重新实现什么?自定义SizeConfig?那里的方法听起来很有希望:calculatePercentages() 和 calculateAvailableSpace()。谁和什么时候打电话给他们?如何捕获列调整大小事件?我需要在某处设置监听器吗?如何让 NatTable 使用自定义的SizeConfig?
我在正确的轨道上吗?
【问题讨论】:
-
我为提到的(侧面)问题创建了一个错误报告:bugs.eclipse.org/bugs/show_bug.cgi?id=516625。我想知道为什么 NatTable 在默认设置下表现如此奇怪,为什么我的示例中的第一列使用 vanilla ColumnResizeCommandHandler 有效地无法调整大小。