• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Updating a JTree

 
Ranch Hand
Posts: 455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi. I have an app that I want to update a JTree as a user enters data. Right now, I have a JTree as the left component on a JSplitPane, and a panel for Maintenance for this JTree as the right component. When the user adds a new entry into the DB, I want the JTree to automatically show the new data after the user presses save.
I am trying to use the reload() method to accomplish this, but am not seeing any changes in the JTree. Could someone tell me what I've missed or done wrong? Here's the method that runs when the user presses Save...


Here's the "refreshTree" method from another class...

I am using the DefaultTreeModel. Let me know if you need to see any other code. Thanks for any help!
 
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You'll need to rebuild the tree model from the database in the "refreshTree()" method. "reload()" tells the tree model that some of its nodes were changed and it needs to update. Since your nodes aren't actually tied to the database, but only hold data that was pulled from the database at the time they are created, the nodes haven't changed, only the data in the database has. You'll need to rebuild the tree model, just like you did when you first created it.
 
Jennifer Sohl
Ranch Hand
Posts: 455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks for straightening me out. I've got the tree updating now.
However, I do have another question on why my tree is doing something.
Here are some records from the db:
Backsplash Laminated Finished
Backsplash Top No Sub-Group
Backsplash Top Without Doors
Basically, from left to right these values are being added into my tree. If the third column has a value of "No Sub-Group" , I do not want to add this as a node to the value in the second column (as you will see in my code).
My problem is I keep getting two "Top" nodes showing up under my "Backsplash" node, and I don't know why. One of the "Top" nodes has no children, and the other has a child ("Without Doors").Could someone take a look at my code and tell me why?
Thanks again!!

[ April 15, 2003: Message edited by: Jennifer Sohl ]
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I think your problem is that the "isNodeChild()" method is not returning what you think it is. For example :


Right before you called "isNodeChild()" you created a new node. So it is impossible for this new node to be a child of the family node! Instead of checking whether a node is a child, you need to see if one of the existing nodes contains the string value you are trying to add.

This would be done like this (modified your code):
 
Jennifer Sohl
Ranch Hand
Posts: 455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Aha! You were right. isNodeChild() was not doing what I thought it was. The modified code you gave me works wonderfully.
But now I wonder, what does isNodeChild() exactly do, and when would be a situation that I would need to use it?
Thanks again for all of your help!!
I really, really appreciate it.
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
isNodeChild() tests to see if the specified node is a child of this one. The node is separate from the value it contains. I haven't tested this out, but I assume that DefaultMutableTreeNode just uses the equals() method to find this out. Default equals() just tests references. You can override equals() to test equality in other ways (for example, test the values of the User Objects contained in the node rather than test node references against each other.), but I'm not sure how this would affect the tree...
 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic