Mega Code Archive

 
Categories / Java Tutorial / Swing
 

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) {     this.name = name;   }   TreeNodeVector(String name, E elements[]) {     this.name = name;     for (int i = 0, n = elements.length; i < n; i++) {       add(elements[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() {     firstNameLabel.setForeground(Color.BLUE);     renderer.add(firstNameLabel);          lastNameLabel.setForeground(Color.BLUE);     renderer.add(lastNameLabel);          salaryLabel.setHorizontalAlignment(JLabel.RIGHT);     salaryLabel.setForeground(Color.RED);     renderer.add(salaryLabel);     renderer.setBorder(BorderFactory.createLineBorder(Color.BLACK));     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;         firstNameLabel.setText(e.firstName);         lastNameLabel.setText(e.lastName);         salaryLabel.setText("" + e.salary);         if (selected) {           renderer.setBackground(backgroundSelectionColor);         } else {           renderer.setBackground(backgroundNonSelectionColor);         }         renderer.setEnabled(tree.isEnabled());         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");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     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();     tree.setCellRenderer(renderer);     JScrollPane scrollPane = new JScrollPane(tree);     frame.add(scrollPane, BorderLayout.CENTER);     frame.setSize(300, 300);     frame.setVisible(true);   } }