java - Refresh JTree without collapsing -


i have tree jbutton node.

i want able toggle buttons name , method called between 2 sets of values.

i think work fine if tree refresh after each button click.

this method seems work, collapses tree on refreshing, need tree stay open.

i'm not adding/deleting node many of other methods i've seen online not apply.

public void valuechanged(treeselectionevent e)  {     defaultmutabletreenode node = (defaultmutabletreenode)             tree.getlastselectedpathcomponent();      /* if nothing selected */      if (node == null) return;      /* retrieve node selected */      object obj = node.getuserobject();     if (obj instanceof employeebutton)          employeebutton eb = (employeebutton) obj;         if (eb.gettext().contains("add employee"));         {             eb.settext("remove employee");             addemp(eb.point);         }         if (eb.gettext().contains("remove employee"));         {             eb.settext("add employee");             delemployee(eb.point);         } };  

using excellent answer jakub zaverka similar question (compound jtree node allowing events pass through objects underneath), this:

// class refreshtree.java:  import javax.swing.*; import javax.swing.tree.*;  public class refreshtree {     public static final string add_employee = "add employee";     public static final string remove_employee = "remove employee";      public static void main(final string[] arguments) {         new refreshtree().launchgui();     }      private void launchgui() {         final defaultmutabletreenode rootnode = new defaultmutabletreenode("root");         rootnode.add(new defaultmutabletreenode(add_employee));         rootnode.add(new defaultmutabletreenode(add_employee));         rootnode.add(new defaultmutabletreenode(add_employee));          final jtree tree = new jtree(rootnode);         tree.seteditable(true);         tree.setcellrenderer(new buttoncellrenderer());         tree.setcelleditor(new buttoncelleditor());          final jframe frame = new jframe("refresh jtree jbutton");         frame.getcontentpane().add(new jscrollpane(tree));         frame.setdefaultcloseoperation(windowconstants.exit_on_close);         frame.setbounds(400, 200, 600, 600);         frame.setvisible(true);     } }   // class buttoncelleditor.java:  import java.awt.*; import javax.swing.*; import javax.swing.tree.*;  public class buttoncelleditor extends abstractcelleditor implements treecelleditor {     private jbutton button;      public buttoncelleditor() {         button = new jbutton(refreshtree.add_employee);         button.addactionlistener(actionevent -> {             final boolean add = refreshtree.add_employee.equals(button.gettext());             if (add)                 system.out.println("call addemp(eb.point)");             else                 system.out.println("call delemployee(eb.point)");             button.settext(add ? refreshtree.remove_employee : refreshtree.add_employee);             stopcellediting();         });     }      @override     public object getcelleditorvalue() {         return button.gettext();     }      @override     public component gettreecelleditorcomponent(final jtree tree,                                                 final object value,                                                 final boolean isselected,                                                 final boolean expanded,                                                 final boolean leaf,                                                 final int row) {         button.settext(value.tostring());         return button;     } }   // class buttoncellrenderer.java:  import java.awt.*; import javax.swing.*; import javax.swing.tree.*;  public class buttoncellrenderer extends jbutton implements treecellrenderer {     @override     public component gettreecellrenderercomponent(final jtree tree,                                                   final object value,                                                   final boolean selected,                                                   final boolean expanded,                                                   final boolean leaf,                                                   final int row,                                                   final boolean hasfocus) {         settext(value.tostring());         return this;     } } 

Comments