0

我有一个方法可以重新计算传递的束的所有节点。在某些环境中,我遇到了调用DefaultTreeModel类方法的延迟(大约 15 毫秒)问题,例如getChildCount, getChild, insertNodeInto. 有趣的是,这种延迟不会发生在循环中的每个元素上。DefaultTreeModel 这种行为的可能原因是什么?这与 Swing 中的线程有关吗?


public void refresh(DefaultTreeModel model, MyTreeNode bunchNode,
            Vector<?> objects, int depth, int maxDepth) {

        int numberOfBunchNodes;
        //insert all objects
        for (int i = 0; i < objects.size(); i++) {
            MyTreeNode newNode = null;
            numberOfBunchNodes = model.getChildCount(bunchNode);
            if (i < numberOfBunchNodes) {
                //insert node if not same objects
                MyTreeNode bNode = (MyTreeNode) model.getChild(bunchNode, i);
                if (bNode.getUserObject() != objects.elementAt(i)) {
                    newNode = new MyTreeNode(objects.elementAt(i));
                    model.insertNodeInto(newNode, bunchNode, i);
                }
                else {
                    model.nodeChanged(bNode);
                    newNode = bNode;
                }
            }
            else {
                newNode = new MyTreeNode(objects.elementAt(i));
                model.insertNodeInto(newNode, bunchNode, i);
            }
            if (depth < maxDepth) {
                Vector<?> subTreeItems = getFurtherNodes(newNode);
                if (!subTreeItems.isEmpty()) {
                    refresh(model, newNode, subTreeItems, depth + 1, maxDepth);
                }
            }
        }
        //remove obsolete tree nodes
        numberOfBunchNodes = bunchNode.getChildCount();
        if (numberOfBunchNodes > objects.size()) {
            for (int i = numberOfBunchNodes - 1; i >= objects.size(); i--) {
                model.removeNodeFromParent((MyTreeNode) model.getChild(bunchNode, i));
            }
        }
    }

Ps 当 Jtree 包含许多元素时,这种延迟很关键,例如有 100 个元素model会导致刷新方法需要大约 1.5 秒。

4

0 回答 0