5

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

在此处输入图像描述

4

2 回答 2

12

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

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

于 2012-04-11T18:37:44.727 回答
9

创建您自己的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());
于 2014-12-17T10:17:28.197 回答