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

sou*_*jee 5 java swing drag-and-drop renderer jtree

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

在此输入图像描述

Con*_*Del 11

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

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

  • 不,如果您提供了一些代码,那将会有所帮助.然后我们可以帮你修复它的错误 (3认同)
  • 'TreeCellRenderer`的+1.@soumitrachatterjee:可以找到一个相关的例子[这里](http://stackoverflow.com/a/8351850/230513); 添加`setForeground(Color.blue)`可以帮助你创建一个[sscce](http://sscce.org/). (3认同)

Sté*_*ert 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,说你的树被调用myTree,设置你的树CellRenderer:

myTree.setCellRenderer(new MyTreeCellRenderer());
Run Code Online (Sandbox Code Playgroud)