Программная прокрутка таблицы SWT по горизонтали

Подобный вопрос, но не совсем то же самое.

table.showColumn() полезен, но прокрутка имеет только гранулярность ширины столбца. Но я хочу более точный контроль местоположения прокрутки.

Рассмотрим следующий вариант использования. У меня есть две таблицы, которые, как я знаю, имеют одинаковую ширину и одинаковую ширину столбцов. И я хочу реализовать своего рода синхронизатор прокрутки, чтобы, когда пользователь прокручивает одну таблицу (по горизонтали), другая таблица прокручивается в то же место.

РЕДАКТИРОВАТЬ:

На форуме Eclipse, кажется, тот же вопрос и некоторые рабочие идеи, но без решения.

РЕДАКТИРОВАТЬ: я обнаружил это поведение в Windows

Ответ 1

Я боюсь, что не могу получить удовлетворительный результат в Windows Vista/7, но почувствовал, что приближаюсь.

Я считаю, что вам придется захватить горизонтальную полосу прокрутки Table, используя table.getHorizontalBar(). Затем вы можете указать scrollbar.setSelection(), чтобы он переместился в указанную позицию.

Вот где я застрял. Так или иначе, вы должны уведомить либо Table, либо ScrollBar, что значение изменилось. Я пробовал все: от update() до notifyListener(), но без кубиков. Кажется, что это всего лишь вопрос выкладки, но layout() тоже не имеет никакого эффекта.

Кстати, помните, что родитель ScrollBar (тип Scrollable) не является ScrolledComposite, как я ожидал, но на самом деле сам Table.

Надеюсь, это даст вам некоторые идеи и поможет найти решение. Если это так, пожалуйста, дайте мне знать, так как это тоже меня прослушивает!

Ответ 2

Метод setOrigin(x,y) в ScrolledComposite должен помочь:

Прокручивает содержимое, чтобы указанная точка содержимого находилась в верхнем левом углу. Если контент не установлен, ничего не произойдет. Отрицательные значения будут проигнорированы. Значения, превышающие максимальное расстояние прокрутки, будут прокручиваться до конца полосы прокрутки.

Ответ 3

Немного поработав в источнике ScrollBar, похоже, что есть многочисленные (окна) ошибки, которые были преодолены в какой-то момент. Это может быть и другое, хотя вы не упомянули о своей ОС, равно как и Пол, так что трудно сказать.

Все функции "изменить позицию полосы прокрутки" заканчиваются вызовом SetScrollInfo, который является приватным пакетом. Я подозреваю, что намерение состоит в том, чтобы это действительно обновляло то, что вам нужно.

Ничто из этого не решает вашу проблему. К счастью, тот же источник также намекает на решение:

Slider.

Вам нужно будет переопределить все поведение полосы прокрутки в слайдере, но как только это будет сделано, это даст вам контроль (har), который вы хотите. С надеждой. OTOH, вы можете столкнуться с точно такой же ошибкой OS (если ошибка), и вернуться к квадрату.

В этой точке вы определенно регистрируете ее как ошибку UI Eclipse.

PS: Вы искали Eclipse Bugzilla для чего-то подобного? Похоже, что он немного поднялся эта ошибка, связанная с тем, что полоса прокрутки не синхронизирована с древовидным представлением в Navigator (на ПК Linux-Motif, но отлично работает в Windows). Я подозреваю, что вы найдете похожие проблемы, если вы копаете немного больше.