reload()
essentially says "the whole tree may have changed, forget anything you previously knew about it and start again".
Instead of using node.removeFromParent()
and then reloading the whole tree, try
((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node);
This will fire a more specific modification event telling listeners that that particular node has been removed but the rest of the tree is unchanged, so you no longer require the reload()
call.