繁体   English   中英

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

[英]How do i change color of Jtree based on my dynamic changing Jtree for java desktop application

大家,我正在用JPanelJFrame制作桌面应用程序。 这是我的树结构:

默认树

@Root
 |-L1B  (node-1)
 |-L2A (node-2)
 |-L1A (node-3)

在此之后,我正在读取一个文件(假设有两个值: value1value2 )并添加叶数据。

所以,我想像这样改变颜色:

@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的继承。 返回渲染的方法是getTreeCellRendererComponent()

不幸的是,你的问题很模糊,所以我不能举一个更具体的例子,所以一个通用的例子是:

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)简化了用于确定进程是否正在运行的代码,以保持答案的焦点。

另外,请检查页面。 它可能对你的追求有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM