如何解决如何更改SWT表格项目选择背景色
我有一个与here相似的用例。我想将SWT表项目选择背景颜色从默认的灰色或蓝色更改为其他颜色。我尝试使用StyledCellLabelProvider#update方法,但没有用。它只是将所有表格项的背景色更新为给定的颜色。但我需要它仅适用于所选项目。下面是我的标签提供程序更新方法的代码段
@Override
public void update(ViewerCell cell) {
cell.setText(provider.getdisplay((T) cell.getElement(),cell.getColumnIndex()));
TableItem currentTableItem = ((TableItem) cell.getViewerRow().getItem());
if (currentTableItem.getParent().getSelectionCount() > 0) {
TableItem selectedTableItem = currentTableItem.getParent().getSelection()[0];
if(currentTableItem == selectedTableItem) {
cell.setBackground(display.getDefault().getSystemColor(SWT.COLOR_LIST_SELECTION));
}
}
cell.setForeground(provider.getdisplayColor((T) cell.getElement(),cell.getColumnIndex()));
super.update(cell);
}
提前感谢您的帮助!
解决方法
选择颜色通常由操作系统选择,因此要更改颜色,您必须关闭StyledCellLabelProvider
erase
,measure
和paint
中的选定标志方法。您还必须使用erase
方法自己绘制选择颜色。
类似以下内容:
@Override
protected void erase(final Event event,final Object element)
{
if ((event.detail & SWT.SELECTED) != 0) {
event.detail &= ~SWT.SELECTED;
Rectangle bounds = event.getBounds();
event.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_SELECTION));
event.gc.fillRectangle(bounds);
}
super.erase(event,element);
}
@Override
protected void measure(final Event event,final Object element)
{
event.detail &= ~SWT.SELECTED;
super.measure(event,element);
}
@Override
protected void paint(final Event event,final Object element)
{
event.detail &= ~SWT.SELECTED;
super.paint(event,element);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。