swing - Java tree nodes from enum values -
i populate jtree nodes enum values. nodes display in uppercase text. undesirable nodes display in lower case.
example:
public enum daysoftheweek { monday("monday", "mon", "first day of work week."), //etc ... private final string fullname; private final string abbrvname; private final string description; daysoftheweek(string fullname, string abbrvname, string description) { this.fullname = fullname; //etc ... } public string getfullname() { return fullname; } } i have tried:
list<defaultmutabletreenode> daysofweeknodes = new arraylist<>(); for(daysoftheweek dotw : daysoftheweek.values()) { daysofweeknodes.add(new defaultmutabletreenode(dotw.getfullname())); daysofweeknodes.get(dotw.ordinal()).setuserobject(dotw); } the node displays as: monday want display as: monday
text based graphic example:
days | ---monday | ---tuesday not
days | ---monday | ---tuesday how tree node associated enum value, text on tree use full name string? or in other words, how set tree node user object have name different?
*note - easy fix go against convention , name values how want them displayed in tree, not uppercase.
you need use treecellrenderer.
here 1 way implement this:
import java.awt.component; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jscrollpane; import javax.swing.jtree; import javax.swing.swingutilities; import javax.swing.tooltipmanager; import javax.swing.tree.defaultmutabletreenode; import javax.swing.tree.defaulttreecellrenderer; import javax.swing.tree.defaulttreemodel; public class testtree { public enum daysoftheweek { monday("monday", "mon", "first day of work week."), tuesday("tuesday", "tue", "second day of work week"); // etc ... private final string fullname; private final string abbrvname; private final string description; private daysoftheweek(string fullname, string abbrvname, string description) { this.fullname = fullname; this.abbrvname = abbrvname; this.description = description; } public string getfullname() { return fullname; } public string getabbrvname() { return abbrvname; } public string getdescription() { return description; } } public class mytreecellrenderer extends defaulttreecellrenderer { @override public component gettreecellrenderercomponent(jtree tree, object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasfocus) { component cell = super.gettreecellrenderercomponent(tree, value, sel, expanded, leaf, row, hasfocus); if (value instanceof defaultmutabletreenode && ((defaultmutabletreenode) value).getuserobject() instanceof daysoftheweek) { ((jlabel) cell).settext(((daysoftheweek) ((defaultmutabletreenode) value).getuserobject()).getfullname()); } return cell; } } private jframe f; private jtree tree; protected void initui() { defaultmutabletreenode root = new defaultmutabletreenode("days"); (daysoftheweek dotw : daysoftheweek.values()) { root.add(new defaultmutabletreenode(dotw)); } final defaulttreemodel model = new defaulttreemodel(root); tree = new jtree(model); tree.setrootvisible(true); tree.setshowsroothandles(true); tooltipmanager.sharedinstance().registercomponent(tree); tree.setcellrenderer(new mytreecellrenderer()); f = new jframe(); f.setdefaultcloseoperation(jframe.exit_on_close); f.setlocationrelativeto(null); f.add(new jscrollpane(tree)); f.pack(); f.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { new testtree().initui(); } }); } } take @ jtree tutorial.
Comments
Post a Comment