繁体   English   中英

如何使用模式将图标设置为树节点

[英]How to set icons to tree nodes using a pattern

我有以下情况:

我想在树中存储对象的方式

对于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;
}

我被绘画材料迷住了。 我知道顺序(上,下,左,右,前,下),但是我需要一种识别节点的方法。 我当时想找他们的父母,并以某种方式通过孩子名单中的号码来识别他们。 在这里需要帮助。

您在制定将图像/图标映射到节点的决策时遇到问题。

我建议您使用策略模式,以便您可以更改查找该节点应使用哪个图标的方式。

然后,您可以尝试不同的方法来解决问题,并且例程不会陷入所有ifs之类的问题中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM