2015-11-25 60 views
-1

大家好,我正在用JPanelJFrame製作桌面應用程序。這裏是我的樹結構:我如何根據我的動態變化Jtree爲java桌面應用程序更改Jtree的顏色

默認樹

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

這個我讀文件後(讓我們假設兩個值:value1value2),並添加葉數據。

所以,I'de想改變顏色像這樣:

@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值可能比60年代更value1,使60秒這將是綠色的,然後變成紅色。

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

所以,基本上我想要運行過程的層次結構。當它運行時,顏色應該是綠色的,然後它會變成另一種顏色。

+0

我會看看[Java教程 - 如何使用樹](https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html)。 –

回答

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; 
    } 
}); 

注意,這個答案是嚴格從顏色的角度呈現看法。用於確定過程是否正在運行的代碼被簡化了(((YourClass)value).getTime() > 60)以保持答案的重點。

此外,檢查this頁面。它可能會幫助你的追求。

+0

公共組件getTreeCellRendererComponent(JTree的樹,對象的值, 布爾選擇,布爾擴大,布爾葉,INT行, 布爾hasFocus){ //代碼 } 我已經裝箱我自己的渲染類,它的完美運行.. 我quesiotn是我如何再次調用這個類和它的getTreeCellRendererComponent()與它不同的變化值。 – Krunal

+0

@Krunal在這種情況下,每次重繪容器時都會調用getTreeCellRendererComponent()函數。所以,我會在進程退出時調用repaint(),這會觸發渲染,然後可以測試進程是否正在運行,並顯示正確的顏色。我希望這有幫助。讓我知道這是否是你的意思。或者,用正確的代碼創建一個新問題,以便我更好地理解您的意思。 – malinator

+0

我不知道如何在自定義渲染器類中傳遞值,以便我可以簡單地使用getTreeCellRendererComponent方法值參數傳遞值。 或者是否有任何方法將我的參數傳遞給thisgetTreeCellRendererComponent()方法。 – Krunal