【发布时间】:2016-02-25 05:58:50
【问题描述】:
我正在尝试将 Nebulla Ganchart 组件用于项目。我们需要一个标准的项目管理视图,在甘特图旁边有一个表格。不幸的是,对齐网格和甘特图组件的行并不容易。 有一个示例,它尝试使用树组件来执行此操作。但这并不精确。图表和树的行高略有不同,此外,滚动会完全搞砸。
请问有人有解决办法吗?
【问题讨论】:
我正在尝试将 Nebulla Ganchart 组件用于项目。我们需要一个标准的项目管理视图,在甘特图旁边有一个表格。不幸的是,对齐网格和甘特图组件的行并不容易。 有一个示例,它尝试使用树组件来执行此操作。但这并不精确。图表和树的行高略有不同,此外,滚动会完全搞砸。
请问有人有解决办法吗?
【问题讨论】:
这可能来得有点晚,但这里有一些基于我使用 Nebula 甘特图的经验的提示。
关于树和图表之间的行高问题。可以通过在 GanttChart 构造函数中传入您自己的类来使用自定义设置创建甘特图。 Nebula 建议在创建此类时扩展 nebula.widgets.ganttchart.AbstractSettings。您可能想要查看和/或覆盖的一些方法:
AbstractSettings.getEventsTopSpacer()
AbstractSettings.getEventsBottomSpacer()
AbstractSettings.getSectionBarDividerHeight()
AbstractSettings.getSectionBarWidth()
您可能还想查看 AbstractSettings.lockHeaderOnVerticalScroll() - 我需要锁定标题栏,然后在表格上方添加填充以正确对齐。
关于在滚动期间链接树/图表。 可以将 SWT.Selection 侦听器添加到树上的垂直条。然后,当树滚动时,您可以强制甘特图也滚动。对我来说,这看起来像:
treeViewer.getTree().getVerticalBar().addListener(SWT.Selection, new Listener(){
@Override
public void handleEvent(Event event){
TreeItem ti = treeViewer.getTree.getTopItem();
ganttChart.getGanttComposite().setTopItem((GanttEvent) ti.getData(), 6, SWT.LEFT);
}
});
请注意,反之则效果不佳;如果您尝试将甘特图的滚动操作链接到树,则响应不会那么敏捷。这是由于甘特图如何平滑滚动,而不是像树一样逐个元素滚动。我通过禁用甘特图上的滚动条绕过了这个问题,但这是一个不太理想的修复。
除此之外,我还必须添加一个 SWT.Resize 侦听器,以便在调整查看器大小时对齐树/图表。
希望这可以为您指明正确的方向!祝你好运。
【讨论】: