#java #swt #jface
Вопрос:
У меня есть просмотрщик таблиц, из которого я скопировал код https://wiki.eclipse.org/JFaceSnippets#Snippet006TableMultiLineCells чтобы включить многострочные записи в ячейках. Поэтому я переопределил методы paint() и measure() в своем StyledCellLabelProvider, и paint выглядит так:
@Override
protected void paint(Event event, Object element) {
TableData cellData = getCellData((TableEntry) element, event.index);
String text = parseData(cellData);
event.gc.drawText(text, event.x, event.y, true);
}
Это работает так, как задумано. Теперь я также хочу раскрасить отдельные слова в ячейках, и у меня есть такой метод обновления:
@Override
public void update(ViewerCell cell) {
doSomeStuff()
...
cell.setText(myStyledString.getString());
if (!ranges.isEmpty()) {
cell.setStyleRanges(ranges.toArray(new StyleRange[ranges.size()]));
} else {
cell.setStyleRanges(new StyleRange[] {});
}
cell.setBackground(myColor);
super.update(cell);
}
Однако стиль текста не работает. Я бы предположил, что существует некоторый конфликт между DrawText и setText в методах рисования и обновления соответственно. Между тем, фон имеет миКолор, как и предполагалось, когда я использую их оба.
Есть ли способ задать цвет слова в методе рисования или как-то иначе обойти это? Поскольку многострочный «взлом» — это обходной путь, я не могу найти в этом большой помощи при поиске в Интернете.
Комментарии:
1.
GC.drawText
просто использует текущие цвета, установленные в GC. Чтобы использовать диапазоны стилей, вам нужно будет обработать все диапазоны стилей, установив цвета в GC для каждого диапазона. В принципе, вам придется взглянуть наStyledCellLabelProvider
paint
метод и сделать большую часть того, что он делает, измененным для нескольких строк.