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

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

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

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

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

我假设您正在使用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); } }