[英]How to change SWT Table Item selection background color
我有一個與這里提到的類似的用例。 我想將 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.