java - JXTreeTable in combination with TreeCellRender and selectedBackground with ColorHighlighter -
i' m trying set custom selectionbackground rows in jxtreetable. works if i'm not setting custom treecellrenderer. if set additionally in illustration selectionbackground of text of node default one. ideas how background of nodetext custom one?
import java.awt.color; import javax.swing.icon; import javax.swing.jframe; import javax.swing.jscrollpane; import javax.swing.uimanager; import org.jdesktop.swingx.jxtreetable; import org.jdesktop.swingx.decorator.colorhighlighter; import org.jdesktop.swingx.decorator.highlightpredicate; import org.jdesktop.swingx.renderer.defaulttreerenderer; import org.jdesktop.swingx.renderer.iconvalue; import org.jdesktop.swingx.treetable.defaultmutabletreetablenode; import org.jdesktop.swingx.treetable.defaulttreetablemodel; public class testhighlighter { public static void main(string[] args) { jframe frame = new jframe(); frame.setdefaultcloseoperation(jframe.exit_on_close); jscrollpane scrollpane = new jscrollpane(); frame.setcontentpane(scrollpane); jxtreetable treetable = new jxtreetable(new defaulttreetablemodel(new defaultmutabletreetablenode("test"))); treetable.setrootvisible(true); scrollpane.setviewportview(treetable); defaulttreerenderer treecellrenderer = new defaulttreerenderer(new iconvalue() { @override public icon geticon(object value) { homecoming uimanager.geticon("fileview.directoryicon"); } }); //comment out next line , background set in highlighter treetable.settreecellrenderer(treecellrenderer); treetable.addhighlighter(new colorhighlighter(highlightpredicate.always, null, null, color.red, null)); frame.pack(); frame.setvisible(true); } }
i tried utilize iconhighlighter (to avoid using custom treecellrenderer) alter icon of node, icon not changed.
treetable.addhighlighter(new iconhighlighter(highlightpredicate.always, uimanager.geticon("fileview.directoryicon")));
[...]the problem is, want have different selectionbackgrounds dependent of node. [...] thought there maybe more elegant way using swingx-renderer.
you can utilize swingx renderer (aka: defaulttreerenderer
) , override getcellrenderercomponent(...) in order set background color depending on node wish. example:
iconvalue iconvalue = new iconvalue() { @override public icon geticon(object value) { homecoming uimanager.geticon("fileview.directoryicon"); } }; defaulttreerenderer treecellrenderer = new defaulttreerenderer(iconvalue) { @override public component gettreecellrenderercomponent(jtree tree, object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasfocus) { component c = super.gettreecellrenderercomponent(tree, value, selected, expanded, leaf, row, hasfocus); if (selected && leaf) { c.setbackground(color.red); } else { setbackground(tree.getbackground()); } homecoming c; } };
in snippet if leaf (not root nor parent) node selected label's background color red. otherwise label's background color default.
java swing renderer swingx jxtreetable
No comments:
Post a Comment