我们已经使用 SWT 树表实现了一个基于表的编辑器。它几乎可以满足我们的要求,只是我们无法找到一种方法来确保当用户水平滚动时前几列保持在其位置(以便人们可以识别正在编辑的行)。
有许多第三方表格控件在不同程度上不完整或被遗弃,还有一个片段显示了如何使用两个表格(垂直滚动时它们会不同步)。
解决这个问题的最佳方法是什么?
至少在我的机器上,这个“官方”SWT片段可以完成您想做的事情 - 它不会在垂直滚动时不同步。但价格是第二个滚动条 - 很难看。为了防止这种情况,您可以SWT.NO_SCROLL
在左表的构造函数中添加样式。
为了改进这件事,您必须在SWT.Traverse
两个表上添加一个侦听器,如果用户使用键导航,它会同步它们,如下所示:
leftTable.addListener(SWT.Traverse, new Listener() {
public void handleEvent( Event event ) {
rightTable.setTopIndex(leftTable.getTopIndex());
}
});
我不会使用另一个 Table 实现,因为您失去了使用 SWT 的最大优势:使用本机小部件,它在每个操作系统中看起来和感觉都“正确”。无论如何,如果你想这样做,来自 Nebula 项目的Grid比 alpha 标签所暗示的要成熟得多。不过,不知道它是否可以做你想做的事。
“同步问题”仅出现在基于 MacOs 的 SWT 上。如果您的目标平台是 windows,那么给定的 SWT-Snippet 应该没有问题。将有更多的监听器在两个表上注册,以同步所有发生的事件(折叠、展开、鼠标滚动等)