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

Nav*_*rla 3 java swt jface

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

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

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

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

gre*_*449 5

我假设你正在使用TreeViewer.

您可以使用a StyledCellLabelProvider为标签字符串的各个部分设置不同的样式.本DelegatingStyledCellLabelProvider类是从这个类派生使事情变得更简单.使用以下方式设置标签提供者:

viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(myLabelProvider));
Run Code Online (Sandbox Code Playgroud)

哪个myLabelProvider是实现类DelegatingStyledCellLabelProvider.IStyledLabelProvider.提供者有一个getImage像往常一样的方法加:

public StyledString getStyledText(Object element)
Run Code Online (Sandbox Code Playgroud)

使用a StyledString允许您对文本应用不同的样式.就像是:

StyledString text = new StyledString();

text.append("unstyled text");

text.append("styled text with decorations style", StyledString.DECORATIONS_STYLER);
Run Code Online (Sandbox Code Playgroud)

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

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

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