How to update JTree elements

16,412

Solution 1

Adding to the node only is not enough, the Tree needs to be notified. The correct way to do this is to let the model take care of adding/removing nodes, as it will notify correctly the Tree on the way.

In case of a DefaultTreeModel (which should be the one used in the JTree if you haven't made your own TreeModel), you have the method insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index), which you can use.

Solution 2

if you use DefaultTreeModel try to call its reload() method.

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.reload();

//or... model.reload(nodeUpdatedByYou);

Never use tree.updateUI() as this is a look and feel operation (although it works).

Solution 3

Actually, it is enough to reload the parent node. Internally,

public void reload()

is using

public void reload(TreeNode node)

but with root as its parameter, so, unless you are updating the direct root's leaf, you are better of using a more fine-grained version.

Solution 4

Since Java use MVC to implement JTree component, your operation that add a node just change the model. Besides, you should notify representation of the tree some modifications have taken place. Try use fireTreeNodes*** methods of your tree model to notify the JTree object this kind of modification. Refer Java API for details. Good luck.

Solution 5

Are you using DefaultTreeModel?

If so, when adding use insertNodeInto API so that appropriate events are generated.

Share:
16,412
ibrahimyilmaz
Author by

ibrahimyilmaz

Updated on November 19, 2022

Comments

  • ibrahimyilmaz
    ibrahimyilmaz over 1 year

    I use JTree with TreeNode which extending DefaultMutableTreeNode.when I add new node,i cant update JTree.Any help will be appreciated

  • Gnoupi
    Gnoupi about 14 years
    Avoid duplicating answers, though, if you don't bring anything new.
  • ring bearer
    ring bearer about 14 years
    Buddy @Gnoupi - the down vote was uncalled for. We concurrently answered the question. I have seen in a few occasions that by the time I finish type my answer and post, a few new answers refresh. Suit yourself.
  • Gnoupi
    Gnoupi about 14 years
    you answered it half an hour later, with saying basically the same thing, that's not what I would call "concurrently". Like I said already, avoid duplicating, as it ultimately brings clutter. If an answer is already stating what you have to say, you can simply not post yours, or delete if if already posted.