簡體   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