SWT: рисовать значки в ячейках таблицы или дерева

У нас есть приложение Swing, которое мы планируем портировать на SWT/JFace. Приложение Swing рисует много значков (javax.swing.Icon реализации) в деревьях и таблицах (значок слева от текста). Если я правильно понял, SWT может рисовать только изображения (также известные как графические файлы). Каким было бы самое простое решение для рисования значка или всей ячейки таблицы/дерева? Заранее спасибо.


person Mot    schedule 12.12.2010    source источник


Ответы (1)


Изображения можно загружать из графических файлов или рисовать в памяти.

Image image = new Image(Display.getCurrent(), width, height);
GC gc = new GC(image);

// draw icon using GC

gc.dispose();

Что касается их отображения в таблицах/деревьях, наиболее прямым подходом является установка изображения на элементе таблицы/дерева:

TableItem item = ...
item.setImage(theImage);

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

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

Однако, если вы не можете заранее предсказать размер изображений, я рекомендую использовать ссылку пользовательский API отрисовки для отображения элементов таблицы/дерева. Этот подход определенно более интенсивен, но дает вам более детальный контроль над результатом.

person qualidafial    schedule 16.12.2010
comment
Спасибо. Есть ли место, где изображение может быть установлено по запросу непосредственно перед рисованием узла? - person Mot; 16.12.2010
comment
Вы можете использовать таблицу SWT.VIRTUAL и прослушиватель SWT.SetData для установки изображения и текста по мере необходимости. - person qualidafial; 16.12.2010