この質問は、おそらくアイコンについて、同様の方法で以前に尋ねられたことを知っています。私がしようとしているのは、ツリー ノードのテキストの色を変更することです。実際、私は 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} に設定し、ツリーをそのパネルに追加します。しかし、木には何の色もありません。明らかに、私はさまざまなツリーでテストしています。なにか提案を?