更改树节点字体颜色
Changing tree node font color
这是我的问题:
我使用树来呈现数据结构,我还有一个对象列表,它提供树的两个对象之间的额外信息(树结构不是特别喜欢)。我想要做的是在我的列表中突出显示对象 select 中涉及的树的两个元素。所以我想在selectselectselect时,改变列表中对象Iselect涉及的树节点的字体颜色。
我已经尝试了几种方法。其中两个是使用 ValueProvider,其 getValue 方法 return 值为 css,但它实际上将 css 显示为文本。在这个例子中,我改变了一棵树,但结果略有相同。这是该解决方案的代码:
submissionTree = new Tree<SubmissionMenuData, SafeHtml>(submissionTreeStore, new ValueProvider<SubmissionMenuData, SafeHtml>() {
@Override
public SafeHtml getValue(SubmissionMenuData object) {
if (object.isActiveLink()){
return SafeHtmlUtils.fromTrustedString("<span style='color:blue;'>"+object.getValue()+"</span>");
}else{
return SafeHtmlUtils.fromTrustedString(object.getValue());
}
}
@Override
public void setValue(SubmissionMenuData object, SafeHtml value) {
// ... not relevant here
}
@Override
public String getPath() {
return "value";
}
});
我的第二个想法是使用这两种方法中的一种,但它们都不起作用(实际上什么也没发生):
view.getSubmissionTree().getView().getElement(elementToChangeColor).getStyle().setColor("blue");
view.getSubmissionTree().getView().getElement(elementToChangeColor).addClassName("blue-font");
然而,即使这不是我想要做的,下面的方法也行得通。
view.getSubmissionTree().getView().getElement(elementToChangeColor).getStyle().setBackgroundColor("blue");
A ValueProvider
不适用于样式 - 它传递要显示(或处理)的值。因此,如果您传递一个 HTML 元素,默认情况下它将按照您的描述打印出来。
一种可能的解决方案是设置自定义单元格。将您的树更改为 Tree<SubmissionMenuData, SubmissionMenuData>
和 return 对象:
submissionTree = new Tree<SubmissionMenuData, SubmissionMenuData>(submissionTreeStore, new ValueProvider<SubmissionMenuData, SubmissionMenuData>() {
@Override
public SubmissionMenuData getValue(SubmissionMenuData object) {
return object; // just return the object itself - how to display it will be handled later
}
@Override
public void setValue(SubmissionMenuData object, SubmissionMenuData value) {
// ... not relevant here
}
@Override
public String getPath() {
return "value";
}
});
现在创建并添加一个单元格:
submissionTree.setCell(new AbstractCell<SubmissionMenuData>() {
@Override
public void render(Context context, SubmissionMenuData object, SafeHtmlBuilder safeHtmlBuilder)
{
if (object.isActiveLink()){
safeHtmlBuilder.appendHtmlConstant("<span style='color:blue;'>"+object.getValue()+"</span>");
else
safeHtmlBuilder.appendEscaped(object.getValue());
}
});
如果您不能或不想更改树的类型,则可以创建一个 AbstractCell<SafeHtml>
。但是随后您将需要通过评估上下文(列和索引)并从树存储中加载对象来找到当前对象。
这是我的问题:
我使用树来呈现数据结构,我还有一个对象列表,它提供树的两个对象之间的额外信息(树结构不是特别喜欢)。我想要做的是在我的列表中突出显示对象 select 中涉及的树的两个元素。所以我想在selectselectselect时,改变列表中对象Iselect涉及的树节点的字体颜色。
我已经尝试了几种方法。其中两个是使用 ValueProvider,其 getValue 方法 return 值为 css,但它实际上将 css 显示为文本。在这个例子中,我改变了一棵树,但结果略有相同。这是该解决方案的代码:
submissionTree = new Tree<SubmissionMenuData, SafeHtml>(submissionTreeStore, new ValueProvider<SubmissionMenuData, SafeHtml>() {
@Override
public SafeHtml getValue(SubmissionMenuData object) {
if (object.isActiveLink()){
return SafeHtmlUtils.fromTrustedString("<span style='color:blue;'>"+object.getValue()+"</span>");
}else{
return SafeHtmlUtils.fromTrustedString(object.getValue());
}
}
@Override
public void setValue(SubmissionMenuData object, SafeHtml value) {
// ... not relevant here
}
@Override
public String getPath() {
return "value";
}
});
我的第二个想法是使用这两种方法中的一种,但它们都不起作用(实际上什么也没发生):
view.getSubmissionTree().getView().getElement(elementToChangeColor).getStyle().setColor("blue");
view.getSubmissionTree().getView().getElement(elementToChangeColor).addClassName("blue-font");
然而,即使这不是我想要做的,下面的方法也行得通。
view.getSubmissionTree().getView().getElement(elementToChangeColor).getStyle().setBackgroundColor("blue");
A ValueProvider
不适用于样式 - 它传递要显示(或处理)的值。因此,如果您传递一个 HTML 元素,默认情况下它将按照您的描述打印出来。
一种可能的解决方案是设置自定义单元格。将您的树更改为 Tree<SubmissionMenuData, SubmissionMenuData>
和 return 对象:
submissionTree = new Tree<SubmissionMenuData, SubmissionMenuData>(submissionTreeStore, new ValueProvider<SubmissionMenuData, SubmissionMenuData>() {
@Override
public SubmissionMenuData getValue(SubmissionMenuData object) {
return object; // just return the object itself - how to display it will be handled later
}
@Override
public void setValue(SubmissionMenuData object, SubmissionMenuData value) {
// ... not relevant here
}
@Override
public String getPath() {
return "value";
}
});
现在创建并添加一个单元格:
submissionTree.setCell(new AbstractCell<SubmissionMenuData>() {
@Override
public void render(Context context, SubmissionMenuData object, SafeHtmlBuilder safeHtmlBuilder)
{
if (object.isActiveLink()){
safeHtmlBuilder.appendHtmlConstant("<span style='color:blue;'>"+object.getValue()+"</span>");
else
safeHtmlBuilder.appendEscaped(object.getValue());
}
});
如果您不能或不想更改树的类型,则可以创建一个 AbstractCell<SafeHtml>
。但是随后您将需要通过评估上下文(列和索引)并从树存储中加载对象来找到当前对象。