2012-04-11 51 views
4

的樣式(顏色,字體)我有一個JFrame兩個面板2 JTree。我想在拖放節點的樣式(顏色和字體)從一棵樹變成了other.Please我提供了一種永久地改變一個JTree節點的顏色。如何改變單一的JTree節點

enter image description here

回答

10

要開始,你需要有一個數據對象,可以處理樣式和顏色。你可以繼承DefaultMutableTreeNode並添加這些數據項與

然後,你需要創建一個自定義的TreeCellRenderer getts和setter。我建議擴展DefaultTreeCellRenderer,並在覆蓋處理程序中檢查您的自定義類,並修改JLabel輸出以使用字體和顏色(如果這些值已設置)

+1

這將是有益的,如果你提供一些代碼.. – 2012-04-11 18:51:24

+3

不,這將是有幫助的,如果你提供了一些代碼。然後,我們可以幫助您解決它出現的問題 – ControlAltDel 2012-04-11 18:53:16

+2

「TreeCellRenderer」的+1。 @soumitrachatterjee:可以找到一個相關示例[here](http://stackoverflow.com/a/8351850/230513);添加'setForeground(Color.blue)'可以幫助你創建一個[sscce](http://sscce.org/)。 – trashgod 2012-04-11 19:10:35

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

最後,說你的樹被稱爲myTree,設置你的CellRenderer它:

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

感謝您對您的代碼段。完美工作! – Nadya 2016-02-19 14:43:14