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

Java 突出显示SWT树节点中的特定字符串,java,swt,jface,Java,Swt,Jface,我有一个要求,像所有树首先将被加载,树包含4个级别 有一个文本字段,用户可以在其中输入“filterText”并按下搜索按钮 在树中,在四个级别中的任何一个级别中,如果与过滤器文本匹配,则只应使用黄色突出显示特定字符串,而不应突出显示整个节点,并展开其对应的树 不匹配的树节点不应展开。我假设您使用的是TreeViewer 您可以使用StyledCellLabelProvider为标签字符串的各个部分设置不同的样式。DelegatingStyledCellLabelProvider类就是从这个类派

我有一个要求,像所有树首先将被加载,树包含4个级别

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

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


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

我假设您使用的是
TreeViewer

您可以使用
StyledCellLabelProvider
为标签字符串的各个部分设置不同的样式。
DelegatingStyledCellLabelProvider
类就是从这个类派生出来的,目的是让事情变得更简单。使用以下内容设置标签提供程序:

viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(myLabelProvider));
其中
myLabelProvider
是一个实现
DelegatingStyledCellLabelProvider.IStyledLabelProvider
的类。提供商像往常一样有一个
getImage
方法,另外还有:

public StyledString getStyledText(Object element)
它使用
样式字符串
,允许您对文本应用不同的样式。比如:

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);
  }
}

嗨,格雷格,这并不能解决我的问题。。。借助于Graphic Conext(GC),我们可以实现它吗?这当然是可能的,但您必须创建自己的样式器,显示您的代码。要使用GC,您必须使用
OwnerDrawLabelProvider
。我注意到我错误地使用了StyledText-应该是StyledString