2015-05-14 188 views
0

這裏是我的問題:更改樹節點的字體顏色

我用一棵樹來呈現的數據結構和我也有,讓樹的兩個物體之間的額外信息(沒有特別喜歡的對象列表由樹結構)。我想要做的是突出顯示列表中對象選擇所涉及的樹的兩個元素。所以我想改變列表中選擇的對象所涉及的樹節點的字體顏色。

我試了幾件事。其中兩個是使用ValueProvider,它的getValue方法用css返回值,但它實際上將css顯示爲文本。在這個例子中,我改變了Tree by Tree,但結果稍微一樣。下面是該解決方案的代碼:

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

回答

1

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>。但是,您將需要通過評估上下文(列和索引)並從樹存儲中加載對象來查找當前對象。

+0

當然,謝謝。我沒有想過要爲此改變樹型。 – RadASM