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
Post a Comment