2012-04-11 30 views

答えて

10

を開始するには、スタイルと色を扱うことができるデータオブジェクトを持っている必要があります。 DefaultMutableTreeNodeをサブクラス化し、これらのデータ項目をgettsとsetterで追加することができます

次に、カスタムTreeCellRendererを作成する必要があります。 DefaultTreeCellRendererを拡張し、オーバーライドされたハンドラでカスタムクラスをチェックし、これらの値が設定されている場合、フォントとカラーを使用するようにJLabel出力を変更することをお勧めします。

+1

あなたには、いくつかのコードを提供する場合それは参考になります。.. –

+3

いいえ、それがあれば参考になりますあなたはいくつかのコードを提供しました。そして、それが何か間違っていても、 'TreeCellRenderer'に対して+1 – ControlAltDel

+2

+1を修正するのを手助けすることができました。 @ soumitrachatterjee:関連する例が見つかりました[ここ](http://stackoverflow.com/a/8351850/230513); 'setForeground(Color.blue)'を追加すると、[sscce](http://sscce.org/)の作成に役立ちます。 – trashgod

5

独自のCellRendererを作成します。 MyTreeCellRendererに適切な動作を与えるには、DefaultTreecellRendererを拡張してgetTreeCellRendererComponentメソッドをオーバーライドする必要があります。

public class MyTreeCellRenderer extends DefaultTreeCellRenderer { 

    @Override 
    public Component getTreeCellRendererComponent(JTree tree, Object value, 
      boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) { 
     super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus); 

     // Assuming you have a tree of Strings 
     String node = (String) ((DefaultMutableTreeNode) value).getUserObject(); 

     // If the node is a leaf and ends with "xxx" 
     if (leaf && node.endsWith("xxx")) { 
      // Paint the node in blue 
      setForeground(new Color(13, 57 ,115)); 
     } 

     return this; 
    } 
} 

最後に、あなたのCellRendererがそれに設定し、あなたのツリーがmyTreeと呼ばれていると言う:

myTree.setCellRenderer(new MyTreeCellRenderer()); 
+1

あなたのコードスニペットありがとうございます。完璧に働いた! – Nadya

関連する問題