2012-04-18 56 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等。