java - 更改树节点字体颜色

标签 java css gwt gxt

这是我的问题:

我使用树来呈现数据结构,我还有一个对象列表,该列表提供树的两个对象之间的额外信息(树结构不是特别喜欢)。我想要做的是在我的列表中突出显示对象选择中涉及的树的两个元素。所以我想在选择列表中的对象时,改变我在列表中选择的对象涉及的树节点的字体颜色。

我试过很多东西。其中两个是使用 ValueProvider,其 getValue 方法返回带有 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>并返回对象:

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>反而。但是随后您将需要通过评估上下文(列和索引)并从树存储中加载对象来找到当前对象。

关于java - 更改树节点字体颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242139/

相关文章:

Java:如何将字符串转换为子类数据类型?

html - 在 FireFox 的 CSS 计算中额外 +4px

javascript - 返回页面的同一部分(css/jQuery)

css - 导致错误的神秘 span 标签

java - GWT 的托管模式不起作用

javascript - 如何在selenium中打印页面并关闭打印窗口

java - 如何使用java.util.logging.Handler类?

java - GWT DatePickerCell 显示 "empty"日期?

java - 如何在Android中播放.pls格式的在线广播?

css - GWT - CSS 文件的 ClientBundle 不适用于类名