Проблема: мне нужна таблица SWT (JFace TableViewer) с переменной высотой строки. Фактически, я решил это на своей машине для разработки (под управлением Ubuntu 10.10). К сожалению, это не работает ни на Windows, ни на Mac.
Сначала я думал, что неправильно использовал библиотеки. Но сейчас я боюсь, что то, что я хочу сделать, просто невозможно в Windows. Я надеюсь, что кто-то здесь убеждает меня в обратном.
Чтобы воспроизвести: вместо того, чтобы предоставлять свой код здесь, я создал минимальную программу для воспроизведения проблемы. Я начал со следующего фрагмента:
http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet049StyledCellLabelProvider.java
Я изменил метод update () для получения двух строк текста для каталогов и одной строки для файлов (для имитации среды с переменной высотой строки):
...
if (file.isDirectory()) {
cell.setText(styledString.toString() + "\n"
+ styledString.toString());
cell.setImage(IMAGE1);
} else {
cell.setImage(IMAGE2);
}
...
Это работает так, как задумано в Linux, но в Windows все строки имеют одинаковую высоту. В частности, видна только одна строка.
Затем я пытался помочь SWT, сделав измерение () более разумным. Поэтому я переписал measure () следующим образом:
protected void measure(Event event, Object element) {
if (((File) element).isDirectory()) {
event.height = 32;
} else {
event.height = 16;
}
super.measure(event, element);
}
Результат: все строки имеют высоту 32. Опять же, это работает так, как задумано в Linux.
Боюсь, что в Windows все строки должны быть одинаковой высоты. Это было бы для меня показом. Кто-нибудь может подтвердить это, или даже лучше, предоставить обходной путь?
Спасибо!