Программная прокрутка таблицы 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). Я подозреваю, что вы найдете похожие проблемы, если вы копаете немного больше.