我有一个tableviewer,我创建了一个上下文菜单,现在右键单击该行我有选项:为所选行着色。 菜单命令链接到我的插件项目中的类。我想选择行然后单击鼠标右键并单击上下文菜单选项:为所选行着色,然后使用此命令为该行的每个单元格中包含的所有文本着色,例如红色。
public class ShowSelected extends AbstractHandler {
@SuppressWarnings("unchecked")
public Object execute(ExecutionEvent event) throws ExecutionException {
//here should be my piece of code
return null;
}
}
如何为该行的每个单元格中的文本选择行和颜色?我每排都有5个细胞。
答案 0 :(得分:1)
选择一行:
TableViewer viewer = .... get your viewer
RowData rowData = .... get the model row data that you want to select
viewer.setSelection(new StructuredSelection(rowData));
要对行进行着色,请使标签提供程序实现IColorProvider
(除了它实现的任何其他内容)。您现在必须实现:
@Override
public Color getForeground(Object element)
{
// TODO return foreground color or null
}
@Override
public Color getBackground(Object element)
{
// TODO return background color or null
}
element
参数是需要颜色的模型行数据。
您可以使用以下方式让表格查看器从标签提供者处请求更新的颜色:
viewer.update(rowData);
关于Color
的说明 - 您创建的任何Color
个对象必须在不再需要时处置。您应该最小化创建的Color
个对象的数量。
如果您使用ColumnLabelProvider
,那么已经实施了IColorProvider
,因此您只需要覆盖getForeground
/ getBackground
。例如:
@Override
public Color getForeground(Object element)
{
RowData rowData = (RowData)element;
// TODO if rowData should have a color return it, otherwise return null
}