2012-04-18 52 views
1

我有以下的情況來設置圖標樹節點:如何使用模式

the way I want to store an object inside my tree

對於ECH樹節點我有一個不同類型的圖像圖標。

我實際設置這些圖標的方式是覆蓋getTreeCellRendererComponent,驗證用戶對象(標題),然後繪製圖標。

否則,將圖標設置爲對象圖標(對於o3),因爲它沒有穩定的名稱。

private final String OBJECTS, OBJECT, MATERIAL, DIMENSIONS, L, W, H, 
     LEFT, RIGHT, FRONT, BACK, TOP, BOTTOM; //=... 

@Override 
public Component getTreeCellRendererComponent(JTree tree, Object value, 
boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { 

    super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 
    node = (DefaultMutableTreeNode) value; 
    String str = node.getUserObject().toString().toLowerCase(); 

    if (str.contains("objects")) { 
     setIcon(new ImageIcon(OBJECTS)); 
    } 
    else if (str.contains("components")) { 
     setIcon(new ImageIcon(OBJECTS)); 
    } 
    else if (str.contains("dimensions")) { 
     setIcon(new ImageIcon(DIMENSIONS)); 
    } 
    else if (str.contains("materials")) { 
     setIcon(new ImageIcon(MATERIAL)); 

    } 
    else if (str.contains("length")) { 
     setIcon(new ImageIcon(L)); 
    } 
    else if (str.contains("width")) { 
     setIcon(new ImageIcon(W)); 
    } 
    else if (str.contains("height")) { 
     setIcon(new ImageIcon(H)); 
    } 
    else if (node.getParent().toString().toLowerCase().contains("components") || 
      node.getParent().toString().toLowerCase().contains("objects")) { 
     setIcon(new ImageIcon(OBJECT)); 
    } 

    return this; 
} 

我被困在繪畫材料的孩子。 我知道順序(上,下,左,右,前,下),但我需要一種方法來識別節點。 我正在想要得到他們的父母,並以某種方式通過他們的編號在childer列表中標識他們。在這裏需要幫助。

+3

不太明白你的問題,但你爲什麼使用字符串rep作爲userObject?使用WhateverRealObject可能(應該)爲您提供確定圖標所需的所有信息。順便說一句:不要在每次調用時創建一個新的圖標,而應在構造函數中創建一次並根據需要使用它們 – kleopatra 2012-04-18 12:26:19

回答

1

您有問題需要制定將圖像/圖標映射到節點的決定。

我建議您使用策略模式,以便您可以更改如何找出哪個圖標應該用於所討論節點的方式。

然後,您可以嘗試不同的方法來解決問題,並且例程不會卡住所有的ifs等。