【问题标题】:JTree single node foregroundJTree单节点前台
【发布时间】:2013-06-08 20:55:12
【问题描述】:

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

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

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

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;
}

还有一个遍历“比较”树并为每个节点调用上述函数的函数。

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},并将树添加到其面板。但是这棵树没有任何不同的颜色。显然,我正在用不同的树进行测试。有什么建议吗?

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing colors jtree highlighting


【解决方案1】:

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

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

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

【讨论】:

  • 事实上,首先我从不同的源(XML 文件)加载两棵树另一个删除第二个的时间树。
猜你喜欢
  • 2012-09-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2012-04-22
  • 2011-06-03
  • 2019-07-23
相关资源
最近更新 更多