如何制作一个 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 列之间的边界,将边界向左拖动,以便通过有效地将第 1 列也向左推来使第 2 列变大。但相反,第 2 列保持不变,而第 1 列缩小!
更新
我的问题是如何实现所需的行为。我需要在哪里设置或重新实现什么?定制SizeConfig
? 那里的方法听起来很有希望:calculatePercentages()
和calculateAvailableSpace()
。谁和什么时候打电话给他们?如何捕获列调整大小事件?我需要在某处设置监听器吗?我怎样才能让 NatTable 使用自定义的SizeConfig
?我在正确的轨道上吗?