Your getting a ClassCastException
because getUserObject()
will initially return a String
, which can't be casted to a JLabel
.
You can just use setText(...)
to replace the text. Something like this
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String text = ((String) node.getUserObject());
String newText = "<html><FONT COLOR=ORANGE size=\\\"2\\\"><B>" + text + "</B></FONT></html>";
setText(newText);
return this;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class TreeCellRender {
JTree tree = new JTree();
public TreeCellRender() {
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() {
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String text = ((String) node.getUserObject());
String newText = "<html><FONT COLOR=ORANGE size=\\\"2\\\"><B>" + text + "</B></FONT></html>";
setText(newText);
return this;
}
};
tree.setCellRenderer(renderer);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tree);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TreeCellRender();
}
});
}
}
Also, if all you wanted to do was set the font and color, you could have easily just done this in your method
public Component getTreeCellRendererComponent(....) {
....
setFont(new Font("impact", Font.PLAIN, 20));
setForeground(Color.GREEN);
return this;
}
UPDATE
Another way proposed by the original poster is this
Another way: Create the tree with strings nodes containing the html code. The renderer will be like that:
public class MyTreeCellRenderer extends DefaultTreeCellRenderer {
DefaultTreeCellRenderer defaultTreeCellRenderer=new DefaultTreeCellRenderer();
@Override
public Component getTreeCellRendererComponent(JTree tree,Object value, boolean sel, boolean expanded, boolean leaf,int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String text = (String)node.getUserObject();
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setText(text);
return textPane;
}
}