2010-11-23 86 views
10

Similar question,但不完全相同。以編程方式水平滾動SWT表

table.showColumn()是有幫助的,但滾動只有列寬的粒度。但我想要更精確地控制滾動位置。

請考慮以下用例。我有兩個表,我知道是相同的寬度,並具有相同的列寬。我想實現某種滾動同步器,以便當用戶滾動一個表(水平)時,另一個表滾動到相同的位置。

非常感謝提前!

Stackoverflow岩石。

編輯:

On the Eclipse forum似乎有同樣的問題,一些工作思路,而不決。

編輯: 我發現在Windows

+0

您是否找到解決方案? – Joel 2015-12-20 10:08:56

+0

差不多放棄了 – RAY 2015-12-20 10:12:46

回答

4

這種行爲恐怕我不能得到一個滿意的結果在Windows Vista/7任,但覺得我是越來越密切。

我相信你必須使用table.getHorizontalBar()來抓取Table的水平滾動條。然後,您可以指定scrollbar.setSelection()使其移動到指定的位置。

這是我卡住的地方。不知何故,您必須通知TableScrollBar價值已更改。我試過從update()notifyListener(),但沒有骰子。看起來這只是佈局的問題,但layout()也沒有任何影響。

順便說一下,要記住的是,ScrollBar的父(類型Scrollable)不是ScrolledComposite像我所預料的,但實際上Table本身。

我希望這給你一些想法,並幫助你找到解決方案。如果是這樣,請讓我知道,因爲它現在也在擾亂我!

+0

我不認爲update()或layout()會起作用。在我看來,setSelection()只是移動拇指而不是任何東西在桌子上。這絕對看起來像一個設計缺陷,但我想知道我們可以做些什麼。 – RAY 2010-11-28 04:21:39

1

ScrollBar源碼中找到了一些東西,看起來好像有很多(windows)的bug已經在某個點上被克服了。這可能是另一回事,雖然你沒有提到你的操作系統,保羅也沒有,所以很難說。

所有「更改滾動條位置」函數最終調用SetScrollInfo這是封裝私有。我懷疑這是爲了實際更新你想要的東西。

這些都不能解決您的問題。謝天謝地,同樣的消息來源也暗示了一個解決方案:

滑塊。

你必須重新實現滑塊內的所有滾動條行爲,但一旦完成,應該給你你想要的控制(har)。希望。 OTOH,你可能會遇到完全相同的操作系統錯誤(如果錯誤),並回到原點。

此時,您肯定會將其註冊爲Eclipse UI錯誤。

PS:您是否搜索過Eclipse Bugzilla的任何類似內容?在瀏覽器中(在PC Linux-Motif上,但在Windows中正常工作),與滾動條不同步的滾動條與同步的樹視圖相關的點差不多變爲this bug。我懷疑你會發現類似的問題,如果你多挖一點。

4

的方法setOrigin(x,y)ScrolledComposite應該有所幫助:

滾動內容,使得內容的特定點在左上角。如果沒有設置內容,則不會發生任何內容。負值將被忽略。大於最大滾動距離的值將導致滾動到滾動條的末尾。