ScrolledComposite中动态Composite删除行后水平对齐偏移问题求助
问题根因
你遇到的对齐偏移问题由两个常见的ScrolledComposite使用错误导致:
- 内容容器
movableRingsComposite的布局参数设置错误,垂直对齐设为了居中,当内容高度小于ScrolledComposite视口高度时就会出现整体偏移 - 删除行更新布局后,没有主动告知ScrolledComposite内容尺寸发生了变化,滚动容器的布局计算还是沿用之前缓存的尺寸
修复步骤
- 第一步:修改
movableRingsComposite的布局参数,将垂直对齐改为顶对齐,关闭多余垂直空间抢占
把原有代码:
movableRingsComposite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
替换为:
movableRingsComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
- 第二步:修改
deleteMovableRing方法,删除行后更新ScrolledComposite的最小尺寸和布局
在movableRingsComposite.layout(true);之后添加两行代码:
// 重新计算内容容器的实际尺寸,更新到滚动容器 scroll.setMinSize(movableRingsComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); // 刷新滚动容器布局 scroll.layout(true);
补充说明
普通Composite不需要手动维护内容尺寸,会自动根据子组件调整布局,因此你替换测试的时候表现正常。ScrolledComposite为了滚动性能,不会主动监听内容尺寸变化,必须在内容增删后显式调用setMinSize更新尺寸,才能保证布局和滚动逻辑正常。
内容的提问来源于stack exchange,提问作者WxJack
相关产品推荐
相关产品推荐

