Creating a Custom Renderer : JTree Editor Renderer « Swing « Java Tutorial

Creating a Custom Renderer
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;

class TreeNodeVector<E> extends Vector<E> {
  String name;

  TreeNodeVector(String name) { = name;

  TreeNodeVector(String name, E elements[]) { = name;
    for (int i = 0, n = elements.length; i < n; i++) {

  public String toString() {
    return "[" + name + "]";

class Employee {
  public String firstName;

  public String lastName;

  public float salary;

  public Employee(String f, String l, float s) {
    this.firstName = f;
    this.lastName = l;
    this.salary = s;


class EmployeeCellRenderer implements TreeCellRenderer {
  JLabel firstNameLabel = new JLabel(" ");

  JLabel lastNameLabel = new JLabel(" ");

  JLabel salaryLabel = new JLabel(" ");

  JPanel renderer = new JPanel();

  DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();

  Color backgroundSelectionColor;

  Color backgroundNonSelectionColor;

  public EmployeeCellRenderer() {
    backgroundSelectionColor = defaultRenderer.getBackgroundSelectionColor();
    backgroundNonSelectionColor = defaultRenderer.getBackgroundNonSelectionColor();

  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
      boolean expanded, boolean leaf, int row, boolean hasFocus) {
    Component returnValue = null;
    if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
      Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
      if (userObject instanceof Employee) {
        Employee e = (Employee) userObject;
        salaryLabel.setText("" + e.salary);
        if (selected) {
        } else {
        returnValue = renderer;
    if (returnValue == null) {
      returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,
          leaf, row, hasFocus);
    return returnValue;

public class EmployeeTree {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Book Tree");
    Employee javaBooks[] = { new Employee("A", "F", 9.99f), new Employee("B", "E", 4.99f),
        new Employee("C", "D", 9.95f) };
    Employee netBooks[] = { new Employee("AA", "CC", 9.99f), new Employee("BB", "DD", 9.99f) };
    Vector<Employee> javaVector = new TreeNodeVector<Employee>("A", javaBooks);
    Vector<Employee> netVector = new TreeNodeVector<Employee>("As", netBooks);
    Object rootNodes[] = { javaVector, netVector };
    Vector<Object> rootVector = new TreeNodeVector<Object>("Root", rootNodes);
    JTree tree = new JTree(rootVector);
    TreeCellRenderer renderer = new EmployeeCellRenderer();
    JScrollPane scrollPane = new JScrollPane(tree);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 300);

14.69.JTree Editor Renderer
14.69.1.Getting Default TreeCellRenderer From JTreeGetting Default TreeCellRenderer From JTree
14.69.2.extends JLabel implements TreeCellRendererextends JLabel implements TreeCellRenderer
14.69.3.Creating a Custom RendererCreating a Custom Renderer
14.69.4.Working with Tree Tooltips: using a Tooltip Cell RendererWorking with Tree Tooltips: using a Tooltip Cell Renderer
14.69.5.Editing Tree Nodes with triple clickingEditing Tree Nodes with triple clicking
14.69.6.Creating a DefaultCellEditor: JTextFieldCreating a DefaultCellEditor: JTextField
14.69.7.Creating a DefaultCellEditor: JComboBoxCreating a DefaultCellEditor: JComboBox
14.69.8.Creating a DefaultCellEditor: JCheckBoxCreating a DefaultCellEditor: JCheckBox
14.69.9.Creating a Proper ComboBox Editor for a TreeCreating a Proper ComboBox Editor for a Tree
14.69.10.Creating an Editor Just for Leaf NodesCreating an Editor Just for Leaf Nodes
14.69.11.Rendering an image in a JTable column
14.69.12.Setting the Activation Click Count for a Table Cell Editor in a JTable Component
14.69.13.Using DefaultTreeCellRenderer
14.69.14.Changing and Removing the Default Icons in a JTree Component
14.69.15.Use UIManager to change the default icon for JTree
14.69.16.Flush the internal cache of Row height