如何根据动态更改jtreeforjava桌面应用程序的Jtree来更改Jtree的颜色

如何根据动态更改jtreeforjava桌面应用程序的Jtree来更改Jtree的颜色,java,swing,applet,jtree,Java,Swing,Applet,Jtree,各位,我正在用JPanel和JFrame制作桌面应用程序。这是我的树结构: 默认树 @Root |-L1B (node-1) |-L2A (node-2) |-L1A (node-3) 在此之后,我将读取一个文件(假设有两个值:value1和value2),并添加叶数据 所以,我想改变颜色如下: @Root |**-L1B** (node-1)(with green color) | value1(with green color) | value2(with gr

各位,我正在用
JPanel
JFrame
制作桌面应用程序。这是我的树结构:

默认树

@Root
 |-L1B  (node-1)
 |-L2A (node-2)
 |-L1A (node-3)
在此之后,我将读取一个文件(假设有两个值:
value1
value2
),并添加叶数据

所以,我想改变颜色如下:

@Root
 |**-L1B**  (node-1)(with green color)
    | value1(with green color)
    | value2(with green color)
 |-L2A (node-2)
 |-L1A (node-3)
value1
值可能是60秒,这意味着60秒后它将变为绿色,然后变为红色

@Root
 |**-L1B**  (node-1)(with green color)
    | value1(with green red)
    | value2(with green color)
 |-L2A (node-2)
 |-L1A (node-3)
60秒后,
value2
值可能比
value1
多60秒,因此在60秒后它将变为绿色,然后变为红色

@Root
 |**-L1B**  (node-1)(with green color)
    | value1(with green red)
    | value2(with green color)
 |-L2A (node-2)
 |-L1A (node-3)

所以,基本上我想要运行进程的层次结构。运行时,颜色应为绿色,然后将变为另一种颜色。

您要查找的是自定义渲染

为此,使用
JTree
并在渲染器中调用
setCellRenderer()
方法

基本渲染器是
DefaultTreeCellRenderer
的继承。返回呈现的方法是
gettreeCellrenderComponent()

不幸的是,您的问题非常模糊,因此我无法给出更具体的示例,因此一般示例如下:

JTree paintedTree = new JTree();
paintedTree.setCellRenderer(new DefaultTreeCellRenderer() {
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        Component renderedItem = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
        if (((YourClass)value).getTime() > 60) {
            renderedItem.setBackground(Color.GREEN);
        }

        return renderedItem;
    }
});
请注意,这个答案完全是从颜色渲染的角度得出的。用于确定进程是否正在运行的代码通过
((YourClass)value.getTime()>60)
简化,以保持答案的焦点


另外,请检查页面。它可能有助于您的追求。

我想看看.public组件GetTreeCellRenderComponent(JTree树、对象值、布尔选择、布尔扩展、布尔叶、int行、布尔hasFocus){//code}我已经构建了自己的渲染类,它运行得非常好。。我的问题是如何使用不同的更改值一次又一次调用此类及其GetTreeCellrenderComponent()。@Krunal在这种情况下,每次重新绘制容器时都会调用
GetTreeCellrenderComponent()
函数。因此,每当进程退出时,我将调用
repaint()
,这将触发渲染,然后您可以测试进程是否正在运行,并显示正确的颜色。我希望这有帮助。如果这是你的意思,请告诉我。或者,用适当的代码创建一个新问题,这样我就可以更好地理解你的意思。我不知道如何在自定义渲染器类中传递值,这样我就可以简单地将传递的值与GetTreeCellRenderComponent方法值参数进行比较。或者是否有任何方法将我的参数传递给ThisGetTreeCellRenderComponent()方法。