4

私は現在試しています

DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();

DefaultMutableTreeNode child = new DefaultMutableTreeNode("String");

if (model.getIndexOfChild(root, child) == -1) {
    model.insertNodeInto(child, root, root.getChildCount());
}

model.reload(root);

また、 TreeModel のメソッドの代わりに「isNodeChild()」メソッドをMutableTreeNodegetIndexOfChild()使用してみました。

これは非常に簡単なことのように思えます: ツリー内の特定のノードを取得し、指定された値 (この場合は a String) を持つ子ノードが既に存在するかどうかを確認します。ある場合は、新しい子ノードを追加しないでください。それ以外の場合は、ノードを子として追加します。

提案?

4

1 に答える 1

3

コードはかなり読みやすいと思います。それぞれをループして、一意かどうかを追跡します。追跡したい場合は、追加された場合に true/false を返します

メソッドのテスト

DefaultMutableTreeNode child = new DefaultMutableTreeNode("String");
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("String");
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("String1");

addUniqueNode(child, model);  // Will get added
addUniqueNode(child1, model); // Will not get added
addUniqueNode(child2, model); // Will get added

方法:

public boolean addUniqueNode(DefaultMutableTreeNode childNode, DefaultTreeModel model)
{
    DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();

    // Check each node
    boolean isUnique = true;
    for (int i = 0; i < model.getChildCount(root); i++)
    {
        Object compUserObj = ((DefaultMutableTreeNode) model.getChild(root, i)).getUserObject();
        if (compUserObj.equals(childNode.getUserObject()))
        {
            isUnique = false;
            break;
        }
    }

    // If Unique, insert
    if(isUnique)
        model.insertNodeInto(childNode, root, root.getChildCount());

    return isUnique;
}
于 2013-07-29T14:59:09.997 に答える