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

时间:2015-11-25 15:09:43

标签: java swing applet jtree

每个人,我都在使用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)

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

1 个答案:

答案 0 :(得分:0)

您正在寻找的是自定义渲染。

为此,请执行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;
    }
});

请注意,此答案严格来自颜色渲染的观点。 <{1}}简化了确定流程是否正在运行的代码,以使答案保持清晰。

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

相关问题