【问题标题】:How to change style (color, font) of a single JTree node如何更改单个 JTree 节点的样式(颜色、字体)
【发布时间】:2012-04-24 02:33:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 不,如果您提供一些代码会很有帮助。然后我们可以帮助您解决问题
    • +1 表示TreeCellRenderer。 @soumitrachatterjee:可以找到一个相关的例子here;添加setForeground(Color.blue) 可以帮助您创建sscce
    • user1291492 不走运...请帮帮我...我正在尝试您的示例...我有两个 DefaultMutableTreeNode 对象:DefaultMutableTreeNode parent = (DefaultMutableTreeNode) path .getLastPathComponent(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(element);
    • 我想为这个父对象和节点对象着色....在哪种方法中我会将这两个作为参数传递.???请帮助...
    【解决方案2】:

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

    【讨论】:

    • 运行完美,代码很棒!但是,如果还想改变树的背景颜色呢?当在MyTreeCellRenderer,在setForeground(new Color(13, 57 ,115));行下,我写setBackground(Color.YELLOW);,树的背景不会变成黄色..
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多