i trying set different background color different nodes of jtree . user can right click on node, push button , choose color jcolorchooser . made custom treecellrenderer(chromatizer()) , overriden method .gettreecellrenderercomponent() in order set backgroundnonselectioncolor chosen color. happens though happens beggining current selection , expands if selections changes . there way change color of selected node?
public class treeexample extends jframe { private jtree tree; private jbutton btn; public treeexample() { btn = new jbutton ("choose color"); chromatizer chroma = new chromatizer(); defaultmutabletreenode root = new defaultmutabletreenode("letters"); defaultmutabletreenode parent1 = new defaultmutabletreenode("uppercase"); defaultmutabletreenode parent2 = new defaultmutabletreenode("lowercase"); defaultmutabletreenode child1 = new defaultmutabletreenode("a"); defaultmutabletreenode child2 = new defaultmutabletreenode("b"); defaultmutabletreenode child3 = new defaultmutabletreenode("c"); defaultmutabletreenode child4 = new defaultmutabletreenode("a"); defaultmutabletreenode child5 = new defaultmutabletreenode("b"); defaultmutabletreenode child6 = new defaultmutabletreenode("c"); root.add(parent1); root.add(parent2); parent1.add(child1); parent1.add(child2); parent1.add(child3); parent2.add(child4); parent2.add(child5); parent2.add(child6); tree = new jtree(root); imageicon imageicon = new imageicon(treeexample.class.getresource("./leaf.jpg")); chroma.setleaficon(imageicon); tree.setcellrenderer(chroma); tree.setshowsroothandles(true); tree.setrootvisible(false); add(new jscrollpane(tree) ); /* start of btn */ btn.addactionlistener( new actionlistener(){ private defaultmutabletreenode dmt; @override public void actionperformed(actionevent event){ dmt = (defaultmutabletreenode)tree.getlastselectedpathcomponent(); color clr = null; clr =jcolorchooser.showdialog(null, "Επιλογή χρώματος", clr); chroma.gettreecellrenderercomponent(tree, dmt, rootpanecheckingenabled, rootpanecheckingenabled, rootpanecheckingenabled, error, rootpanecheckingenabled, clr); ( (defaulttreemodel) tree.getmodel()).nodechanged(dmt); } ); /*end of btn */ /*right mouse click menu*/ tree.addmouselistener(new mouseadapter () { public void mousepressed(mouseevent e) { if ( swingutilities.isrightmousebutton ( e ) ) { int row = tree.getclosestrowforlocation(e.getx(), e.gety()); tree.setselectionrow(row); treepath path = tree.getpathforlocation ( e.getx (), e.gety () ); rectangle pathbounds = tree.getui ().getpathbounds ( tree, path ); if ( pathbounds != null && pathbounds.contains ( e.getx (), e.gety () ) ) { jpopupmenu menu = new jpopupmenu (); menu.add (btn) ; menu.show ( tree, pathbounds.x, pathbounds.y + pathbounds.height ); } } } } ); /*end of menu*/ this.setdefaultcloseoperation(jframe.exit_on_close); this.settitle("jtree example"); this.setsize(200, 200); this.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { new treeexample(); } }); } } and custom renderer
public class chromatizer extends defaulttreecellrenderer { public component gettreecellrenderercomponent( jtree tree, object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasfocus, color color) { super.gettreecellrenderercomponent( tree, value, sel, expanded, leaf, row, hasfocus); defaultmutabletreenode node = (defaultmutabletreenode) value; if(node.getparent() != null){ super.setbackgroundnonselectioncolor(color); super.setbackgroundselectioncolor(color); } return this; } }; images(couldn't upload due being new member ! : )
first screen[1] http://i.stack.imgur.com/lnrka.jpg after right-clicking , pushing button "choose color"[2] http://i.stack.imgur.com/xicrp.jpg result after clicking ok[3] http://i.stack.imgur.com/l48ft.jpg if left-click there(arrow) tree nodes filled color[4] http://i.stack.imgur.com/1ceks.jpg
maybe can use this
defaulttreecellrenderer defaultrenderer = new defaulttreecellrenderer(); //do 1 of parameter //tree, value, selected, expanded, leaf, row, hasfocus component returnvalue = defaultrenderer.gettreecellrenderercomponent(tree, value, selected, expanded, leaf, row, hasfocus); return returnvalue;
Comments
Post a Comment