Как определить предпочтительный размер JFace TreeViewer или дерева SWT?

Я пишу плагин Eclipse, который имеет элемент управления наведением, состоящий из двух элементов управления, один поверх другого:

Средство просмотра HTML (BrowserInformationControl), для которого я могу легко вычислить подсказку по размеру.

TreeViewer, содержащий дерево.

Я настроил свое дерево с фактическим содержимым. Однако я не могу найти способ определить размер дерева или подсказку размера для него после визуализации.


person Uri    schedule 11.03.2009    source источник
comment
Просто добавил ссылки и альтернативу для проверки. Чтобы быть уверенным, не могли бы вы уточнить свой вопрос, указав точную версию Eclipse, которую вы используете? И предполагаемая цель (с точки зрения версии Eclipse)?   -  person VonC    schedule 11.03.2009
comment
Это будет определяться макетом, которым управляет виджет.   -  person andyczerwonka    schedule 13.10.2009


Ответы (1)


Согласно API org.eclipse.swt.widgets.Tree это нужно сделать с помощью:

public Point computeSize(int wHint,
                     int hHint,
                     boolean changed)

Предпочтительный размер элемента управления — это размер, в котором он лучше всего отображается.

Аргументы подсказки по ширине и подсказки по высоте позволяют вызывающему объекту задать элементу управления такие вопросы, как "Учитывая определенную ширину, какой высоты должен быть элемент управления, чтобы отобразить все содержимое?"
Чтобы указать, что вызывающий не желает чтобы ограничить конкретное измерение, в качестве подсказки передается константа SWT.DEFAULT.

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


Обратите внимание, что в Windows поведение computeSize() было ошибочным: см. этот сообщение и эта ошибка: исправлено для eclipse 3.4M1 и вперед.

Пример использования computeSize() в это сообщение.

Использование getBound() может быть еще одной интересной альтернативой.

person VonC    schedule 11.03.2009
comment
Это то, что я использовал... К сожалению, это не впечатляет Eclipse, который все время возвращает слишком маленькую точку... - person Uri; 11.03.2009
comment
Привет VonC, спасибо за помощь с этим. Оказывается, проблема возникает только в версии для Mac. Когда я запускаю его в Windows, мой код работает как шарм. Я собираюсь проверить другой дистрибутив Mac, так как они используют две разные системы пользовательского интерфейса. - person Uri; 12.03.2009
comment
@Uri: приятно знать. Я проверю, зарегистрирована ли для этого текущая ошибка затмения. - person VonC; 12.03.2009