2010-11-23 4 views
10

Similar question, но не совсем то же самое.Программно прокрутите стол SWT горизонтально

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

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

Большое спасибо!

Stackoverflow пород.

EDIT:

On the Eclipse forum, кажется, тот же вопрос, и некоторые рабочие идеи, но нет решения.

EDIT: Я обнаружил это поведение Windows,

+0

Решение проблемы? – Joel 2015-12-20 10:08:56

+0

В значительной степени сдался – RAY 2015-12-20 10:12:46

ответ

4

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

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

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

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

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

+0

Я не думаю, что update() или layout() будут работать. Мне кажется, что setSelection() просто перемещает большой палец, а не что-то на столе. Это определенно кажется ошибкой дизайна, но мне интересно, что мы можем с этим поделать. – RAY 2010-11-28 04:21:39

1

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

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

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

Ползунок.

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

В ЭТОМ пункте вы определенно зарегистрируете его как ошибку UI Eclipse.

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

4

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

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

Смежные вопросы