0

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

4

1 に答える 1

1

私があなたのコードを正しく理解していれば、作成時に比較を行い、 method 内で各ツリー ノードのレンダラーを (複数回) 設定しますcompareTrees

残念ながら、それはスイングでツリーレンダラーが処理される方法ではありません。レンダラーは、ツリー コンポーネントのレンダリング中に要求に応じて準備されます。したがって、事前に複数のレンダラーを設定しても、何も役に立ちません。

考えられるアプローチは、比較を行い、結果 (つまり色) をツリー モデルに保存することです。次に、現在のノードのこの値を読み取り、それに応じてレンダリング カラーを設定する基本的なツリー レンダラーを作成できます。

于 2013-06-12T17:09:02.123 に答える