【问题标题】:How to set icons to tree nodes using a pattern如何使用模式将图标设置为树节点
【发布时间】:2012-04-18 12:13:27
【问题描述】:

我有以下情况:

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

我一直在画 Material 的孩子。 我知道顺序(上、下、L、R、前、下),但我需要一种方法来识别节点。 我正在考虑让他们的父母并以某种方式通过他们在孩子名单中的号码来识别他们。在这里需要帮助。

【问题讨论】:

  • 不太明白你的问题,但你为什么使用字符串rep作为userObject?使用可能(应该)为您提供决定图标所需的所有信息的 WhatRealObject。顺便说一句:不要在每次调用时创建新图标,而是在构造函数中创建一次并酌情使用

标签: java image swing jtree


【解决方案1】:

您无法制定将图像/图标映射到节点的决策。

我建议你使用策略模式,这样你就可以改变如何找出应该为相关节点使用哪个图标的方式。

然后您可以尝试不同的方法来解决问题,并且例程不会被所有 if 等卡住。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多