突出显示SWT树节点中的特定字符串

时间:2014-10-03 05:44:43

标签: java swt jface

我有一个要求,首先加载树,树包含4个级别。

有一个文本字段,用户可以输入“filterText”,按下搜索按钮。

在树中,如果与过滤器文本匹配,则在四个级别中的任何一个级别中,该特定字符串仅应以黄色突出显示,而不是整个节点,并且其对应的树将被展开。

不匹配的树节点不应该展开。

1 个答案:

答案 0 :(得分:5)

我假设您使用的是TreeViewer

您可以使用StyledCellLabelProvider为标签字符串的某些部分设置不同的样式。 DelegatingStyledCellLabelProvider类派生自此类,使事情变得更容易一些。使用以下方式设置标签提供者:

viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(myLabelProvider));

其中myLabelProvider是实现DelegatingStyledCellLabelProvider.IStyledLabelProvider的类。提供商通常使用getImage方法加上:

public StyledString getStyledText(Object element)

使用StyledString,允许您对文本应用不同的样式。类似的东西:

StyledString text = new StyledString();

text.append("unstyled text");

text.append("styled text with decorations style", StyledString.DECORATIONS_STYLER);

以及您可以定义自己的预定义StyledString.Styler值。 DefaultStyler类允许您使用JFace颜色注册表中定义的颜色。

将背景设置为黄色的样式器的简单版本为:

class HighlightStyler extends Styler
{
  @Override
  public void applyStyles(final TextStyle textStyle)
  {
    textStyle.background = Display.getDefault().getSystemColor(SWT.COLOR_YELLOW);
  }
}