以编程方式水平滚动SWT表

时间:2010-11-23 08:47:06

标签: java swt

Similar question,但不完全一样。

table.showColumn()很有用,但滚动只有列宽的粒度。但我希望更精确地控制滚动位置。

考虑以下用例。我知道有两个表宽度相同且列宽相同的表。我想实现某种类型的滚动同步器,以便当用户滚动一个表(水平)时,另一个表滚动到同一位置。

编辑:

On the Eclipse forum似乎有同样的问题和一些有用的想法,但没有解决方案。

编辑: 我在Windows上发现了这种行为

3 个答案:

答案 0 :(得分:4)

我担心我无法在Windows Vista / 7中获得令人满意的结果,但我觉得我已经接近了。

我相信您必须使用Table抓住table.getHorizontalBar()的水平滚动条。然后,您可以指定scrollbar.setSelection()以使其移动到指定位置。

这是我被卡住的地方。不知何故,您必须通知TableScrollBar值已更改。我尝试了从update()notifyListener()的所有内容,但没有骰子。这似乎只是一个布局问题,但layout()也没有任何影响。

顺便提一下,请记住,ScrollBar的父级(类型Scrollable)不是我预期的ScrolledComposite,而实际上是Table本身。

我希望这能为您提供一些想法并帮助您找到解决方案。如果是这样,请告诉我,因为它现在也在困扰我!

答案 1 :(得分:4)

ScrolledComposite中的方法setOrigin(x,y)应该有所帮助:

  

滚动内容,使内容中的指定点位于左上角。如果未设置任何内容,则不会发生任何事情。负值将被忽略。大于最大滚动距离的值将导致滚动到滚动条的末尾。

答案 2 :(得分:1)

ScrollBar源中略微探讨了一下,看起来有很多(窗口)错误已经被克服了。这可能是另一个,虽然你没有提到你的操作系统,也没有保罗,所以很难说。

所有“更改滚动条位置”功能最终调用SetScrollInfo这是包私有。我怀疑这样做的目的是以你想要的方式实际更新。

这些都不能解决您的问题。值得庆幸的是,同样的消息来源也暗示了一个解决方案:

滑块。

您必须重新实现滑块内的所有滚动条行为,但一旦完成,为您提供所需的控件(har)。希望。 OTOH,你可能遇到完全相同的操作系统错误(如果错误),并回到正方形。

在这一点上,您肯定将其注册为Eclipse UI错误。

PS:您是否在Eclipse Bugzilla搜索了类似的内容?与滚动条相关的一点点翻转this bug与导航器中的树视图不同步(在PC Linux-Motif上,但在Windows中正常工作)。我怀疑如果再挖一点,你会发现类似的问题。