2012-04-11 52 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