我知道我可以使用以下命令更改文本 colored颜色 :

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:

通过这样做,所有 node 的文本 colored颜色 都会更改,但我应该如何只更改"Node 1"的 colored颜色 呢?

推荐答案

要在Java Swing中更改JTree中某些元素的文本 colored颜色 ,可以使用自定义呈现器.呈现器负责呈现树中 node 的可视表示.以下是如何实现这一点的方法:

  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:

假设您有一个名为treeJTree,可以如下设置自定义渲染器:

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

请记住,此方法仅影响特定树 node 的文本 colored颜色 ,而不影响整个树.它允许您仅将自定义呈现应用于满足在getTreeCellRendererComponent方法中定义的条件的元素.

Java相关问答推荐

使用ExecutorService时在ThreadFactory中触发自定义newThread函数

Apache POI:使用反射获取zoom 级别

JUnit—如何模拟局部变量对象方法调用

对Java中的通配符参数的混淆

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

带错误BER验证的itext8签名返回pdf

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Quarkus:运行时出现EnumConstantNotPresentException

通过Java列表中的某些字段搜索值

没有Tomcat,IntelliJ如何在本地运行API?

如何在ApacheHttpClient 5中为单个请求设置代理?

在Java Spring JPA中插入包含对其他实体的引用的列

Java类型推断:为什么要编译它?

如何将RESTAssured';S的Http标题转换为<;字符串、字符串和>的映射?

如何在特定关键字后提取与模式匹配的多个值?

如何在JSP中从select中获取值并将其放入另一个select

ReturnedRect在升级后反转

Java方法参数:括号中的类型声明?

双对象供应商

如何使用命令行为Java应用程序生成烟雾测试用例