如何更改 JTree 的某些元素的文本颜色而不是整个树?

问题描述 投票:0回答:1

我知道我可以使用以下方法更改文本颜色:

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.*;

public class UIManagerNodeColor {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("UIManager Node Color");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


            UIManager.put("Tree.textForeground", Color.decode("#6FB2D2"));

            JTree tree = new JTree();

            DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
            DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Node 1");
            DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Node 2");

            root.add(node1);
            root.add(node2);


            tree.setModel(new DefaultTreeModel(root));

            frame.add(new JScrollPane(tree));
            frame.setSize(300, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

this is the output:

通过这样做,所有节点的文本颜色都改变了,但是我应该如何做才能只改变“节点1”的颜色?

java swing jtree textcolor
1个回答
0
投票

要更改 Java Swing 中

JTree
中某些元素的文本颜色,您可以使用自定义渲染器。渲染器负责渲染树中节点的视觉表示。以下是实现这一目标的方法:

  1. 创建一个扩展的自定义单元格渲染器类
    DefaultTreeCellRenderer
    :
import javax.swing.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;

public class CustomTreeCellRenderer extends DefaultTreeCellRenderer {
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value,
                                                  boolean selected, boolean expanded,
                                                  boolean leaf, int row, boolean hasFocus) {
        Component component = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);

        // Check if the element's text should have a different color
        if (value.toString().equals("ElementName")) { // Replace with the actual condition
            component.setForeground(Color.RED); // Change the color as needed
        } else {
            component.setForeground(Color.BLACK); // Default color
        }

        return component;
    }
}
  1. 将自定义渲染器设置为您的
    JTree

假设你有一个名为

JTree
tree
,你可以像这样设置自定义渲染器:

tree.setCellRenderer(new CustomTreeCellRenderer());
  1. 自定义
    getTreeCellRendererComponent
    方法内的条件以确定哪些元素应更改其文本颜色。在上面的示例中,我使用
    "ElementName"
    作为占位符条件。将其替换为确定哪些元素应更改其文本颜色的实际条件。

请记住,这种方法仅影响特定树节点的文本颜色,而不影响整个树。它允许您仅将自定义渲染应用于满足您在

getTreeCellRendererComponent
方法中定义的条件的元素。

© www.soinside.com 2019 - 2024. All rights reserved.