簡體   English   中英

如何更改 SWT 表項選擇背景顏色

[英]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 erasemeasurepaint方法中的選定標志。 您還必須在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM