我有一个方法可以重新计算传递的束的所有节点。在某些环境中,我遇到了调用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 秒。