如何更改单个JTree节点的样式(颜色,字体)

时间:2012-04-11 18:31:57

标签: java swing drag-and-drop jtree renderer

我在JTree的两个面板中有两个JFrame。我想改变节点的样式(颜色和字体)从一棵树拖放到另一棵树。请给我一种方法来永久地改变JTree节点的颜色。

enter image description here

2 个答案:

答案 0 :(得分:12)

首先,您需要一个可以处理样式和颜色的数据对象。您可以继承DefaultMutableTreeNode并使用getts和setter

添加这些数据项

然后您需要创建自定义TreeCellRenderer。我建议扩展DefaultTreeCellRenderer,并在重写的处理程序中检查您的自定义类,并修改JLabel输出以使用Font和Color(如果设置了这些值)

答案 1 :(得分:7)

创建自己的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());