首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTree单节点前台

JTree单节点前台
EN

Stack Overflow用户
提问于 2013-06-13 00:30:06
回答 1查看 266关注 0票数 0

我知道这个问题以前也以类似的方式被问过,也许是针对图标。我尝试的是更改树节点文本的颜色。事实上,我有一个jTree,我想设置三种不同的颜色,默认的颜色是红色和橙色。

其目的是,如果我将树与另一个树进行比较,则会突出显示两个树之间差异(默认情况下表示没有差异,橙色表示只是值不同,红色表示节点完全不同)

我有两个函数,一个遍历“原始”树,从比较的树中查找节点,如果没有找到{ node },则返回false:

代码语言:javascript
复制
private Boolean findNodeInRefTree(DefaultTreeModel model, Object root, DefaultMutableTreeNode node){
     Boolean bRet = false;
     for (int i = 0; ((i < model.getChildCount(root))&&(!bRet)); i++){
         DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(root, i);
         bRet = node.getUserObject().equals(child.getUserObject());
         if (!bRet)
             bRet = findNodeInRefTree(model, child, node);
     }//for:i
     return bRet;
}

另一个函数遍历“比较”树,并为每个节点调用上面的内容。

代码语言:javascript
复制
private void compareTrees(TreeModel model, Object root){

    for (int i = 0; i < model.getChildCount(root); i++){
        DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(root, i);        
        //find if node exists in original
        DefaultTreeModel modelRef = (DefaultTreeModel) _ref.getModel();
        if (!findNodeInRefTree(modelRef, modelRef.getRoot(), child)){
            DefaultTreeCellRenderer render = (DefaultTreeCellRenderer) _temp.getCellRenderer();
            render.setForeground(Color.RED);
            _temp.setCellRenderer(render);
        }//fi            
        _new.insertNodeInto((DefaultMutableTreeNode) child, (DefaultMutableTreeNode) root, i);            
        compareTrees(model, child);
    }//for:i
}

然后,当它结束时,我只需将新树{_new}的模型设置为新树{_temp},并将该树添加到其面板中。但是这棵树没有任何不同的颜色。显然,我正在使用不同的树进行测试。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2013-06-13 01:09:02

如果我正确理解了你的代码,你可以在创建时进行比较,并在compareTrees方法中为每个树节点设置渲染器(即多次设置)。

不幸的是,这不是在swing中处理tree renderers的方式。在渲染树组件期间,根据请求准备渲染器。因此,预先设置多个渲染器不会有任何用处。

一种可能的方法是进行比较,并将结果(即颜色)保存在您的树模型中。然后,您可以编写一个基本的树渲染器,该渲染器读取当前节点的此值并相应地设置渲染颜色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17070687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档