1

次のような状況があります。

ツリー内にオブジェクトを格納する方法

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

マテリアルの子のペイントに行き詰まっています。順序 (上、下、左、右、前、下) はわかっていますが、ノードを識別する方法が必要です。私は彼らの親を取得し、どういうわけか子供のリストの番号でそれらを識別しようと考えていました. ここで助けが必要です。

4

1 に答える 1

1

イメージ/アイコンをノードにマップする決定を定式化する問題があります。

問題のノードに使用するアイコンを見つける方法を変更できるように、戦略パターンを使用することをお勧めします。

次に、問題を解決するためにさまざまな方法を試すことができます。また、ルーチンがすべての if などで行き詰まることもありません。

于 2012-04-18T12:23:44.477 に答える