この質問は、おそらくアイコンについて、同様の方法で以前に尋ねられたことを知っています。私がしようとしているのは、ツリー ノードのテキストの色を変更することです。実際、私は jTree を持っており、デフォルトの赤とオレンジの 3 つの異なる色を設定したいと考えています。
目的は、そのツリーを別のツリーと比較すると、両方のツリーの違いを強調表示することです (デフォルトは違いがないことを意味し、オレンジは値の違いだけを意味し、赤はノードが完全に異なることを意味します)
私は 2 つの関数を持っています。1 つは「元の」ツリーを走査して、比較対象のノードからノードを探し、{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} に設定し、ツリーをそのパネルに追加します。しかし、木には何の色もありません。明らかに、私はさまざまなツリーでテストしています。なにか提案を?