<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing%2FJTree_Editor_Renderer</id>
		<title>Java Tutorial/Swing/JTree Editor Renderer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing%2FJTree_Editor_Renderer"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/JTree_Editor_Renderer&amp;action=history"/>
		<updated>2026-04-21T09:58:30Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Swing/JTree_Editor_Renderer&amp;diff=3803&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/JTree_Editor_Renderer&amp;diff=3803&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Swing/JTree_Editor_Renderer&amp;diff=3804&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/JTree_Editor_Renderer&amp;diff=3804&amp;oldid=prev"/>
				<updated>2010-05-31T15:31:16Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Changing and Removing the Default Icons in a JTree Component ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Icon leafIcon = new ImageIcon(&amp;quot;leaf.gif&amp;quot;);&lt;br /&gt;
    Icon openIcon = new ImageIcon(&amp;quot;open.gif&amp;quot;);&lt;br /&gt;
    Icon closedIcon = new ImageIcon(&amp;quot;closed.gif&amp;quot;);&lt;br /&gt;
    JTree tree = new JTree();&lt;br /&gt;
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();&lt;br /&gt;
    renderer.setLeafIcon(leafIcon);&lt;br /&gt;
    renderer.setClosedIcon(closedIcon);&lt;br /&gt;
    renderer.setOpenIcon(openIcon);&lt;br /&gt;
&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.add(new JScrollPane(tree));&lt;br /&gt;
    f.setSize(300, 300);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a Custom Renderer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.BorderFactory;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeCellRenderer;&lt;br /&gt;
class TreeNodeVector&amp;lt;E&amp;gt; extends Vector&amp;lt;E&amp;gt; {&lt;br /&gt;
  String name;&lt;br /&gt;
  TreeNodeVector(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  TreeNodeVector(String name, E elements[]) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    for (int i = 0, n = elements.length; i &amp;lt; n; i++) {&lt;br /&gt;
      add(elements[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;[&amp;quot; + name + &amp;quot;]&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Employee {&lt;br /&gt;
  public String firstName;&lt;br /&gt;
  public String lastName;&lt;br /&gt;
  public float salary;&lt;br /&gt;
  public Employee(String f, String l, float s) {&lt;br /&gt;
    this.firstName = f;&lt;br /&gt;
    this.lastName = l;&lt;br /&gt;
    this.salary = s;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class EmployeeCellRenderer implements TreeCellRenderer {&lt;br /&gt;
  JLabel firstNameLabel = new JLabel(&amp;quot; &amp;quot;);&lt;br /&gt;
  JLabel lastNameLabel = new JLabel(&amp;quot; &amp;quot;);&lt;br /&gt;
  JLabel salaryLabel = new JLabel(&amp;quot; &amp;quot;);&lt;br /&gt;
  JPanel renderer = new JPanel();&lt;br /&gt;
  DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();&lt;br /&gt;
  Color backgroundSelectionColor;&lt;br /&gt;
  Color backgroundNonSelectionColor;&lt;br /&gt;
  public EmployeeCellRenderer() {&lt;br /&gt;
    firstNameLabel.setForeground(Color.BLUE);&lt;br /&gt;
    renderer.add(firstNameLabel);&lt;br /&gt;
    &lt;br /&gt;
    lastNameLabel.setForeground(Color.BLUE);&lt;br /&gt;
    renderer.add(lastNameLabel);&lt;br /&gt;
    &lt;br /&gt;
    salaryLabel.setHorizontalAlignment(JLabel.RIGHT);&lt;br /&gt;
    salaryLabel.setForeground(Color.RED);&lt;br /&gt;
    renderer.add(salaryLabel);&lt;br /&gt;
    renderer.setBorder(BorderFactory.createLineBorder(Color.BLACK));&lt;br /&gt;
    backgroundSelectionColor = defaultRenderer.getBackgroundSelectionColor();&lt;br /&gt;
    backgroundNonSelectionColor = defaultRenderer.getBackgroundNonSelectionColor();&lt;br /&gt;
  }&lt;br /&gt;
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,&lt;br /&gt;
      boolean expanded, boolean leaf, int row, boolean hasFocus) {&lt;br /&gt;
    Component returnValue = null;&lt;br /&gt;
    if ((value != null) &amp;amp;&amp;amp; (value instanceof DefaultMutableTreeNode)) {&lt;br /&gt;
      Object userObject = ((DefaultMutableTreeNode) value).getUserObject();&lt;br /&gt;
      if (userObject instanceof Employee) {&lt;br /&gt;
        Employee e = (Employee) userObject;&lt;br /&gt;
        firstNameLabel.setText(e.firstName);&lt;br /&gt;
        lastNameLabel.setText(e.lastName);&lt;br /&gt;
        salaryLabel.setText(&amp;quot;&amp;quot; + e.salary);&lt;br /&gt;
        if (selected) {&lt;br /&gt;
          renderer.setBackground(backgroundSelectionColor);&lt;br /&gt;
        } else {&lt;br /&gt;
          renderer.setBackground(backgroundNonSelectionColor);&lt;br /&gt;
        }&lt;br /&gt;
        renderer.setEnabled(tree.isEnabled());&lt;br /&gt;
        returnValue = renderer;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (returnValue == null) {&lt;br /&gt;
      returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,&lt;br /&gt;
          leaf, row, hasFocus);&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class EmployeeTree {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Book Tree&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Employee javaBooks[] = { new Employee(&amp;quot;A&amp;quot;, &amp;quot;F&amp;quot;, 9.99f), new Employee(&amp;quot;B&amp;quot;, &amp;quot;E&amp;quot;, 4.99f),&lt;br /&gt;
        new Employee(&amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;, 9.95f) };&lt;br /&gt;
    Employee netBooks[] = { new Employee(&amp;quot;AA&amp;quot;, &amp;quot;CC&amp;quot;, 9.99f), new Employee(&amp;quot;BB&amp;quot;, &amp;quot;DD&amp;quot;, 9.99f) };&lt;br /&gt;
    Vector&amp;lt;Employee&amp;gt; javaVector = new TreeNodeVector&amp;lt;Employee&amp;gt;(&amp;quot;A&amp;quot;, javaBooks);&lt;br /&gt;
    Vector&amp;lt;Employee&amp;gt; netVector = new TreeNodeVector&amp;lt;Employee&amp;gt;(&amp;quot;As&amp;quot;, netBooks);&lt;br /&gt;
    Object rootNodes[] = { javaVector, netVector };&lt;br /&gt;
    Vector&amp;lt;Object&amp;gt; rootVector = new TreeNodeVector&amp;lt;Object&amp;gt;(&amp;quot;Root&amp;quot;, rootNodes);&lt;br /&gt;
    JTree tree = new JTree(rootVector);&lt;br /&gt;
    TreeCellRenderer renderer = new EmployeeCellRenderer();&lt;br /&gt;
    tree.setCellRenderer(renderer);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a DefaultCellEditor: JCheckBox ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.swing.DefaultCellEditor;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.TreeCellEditor;&lt;br /&gt;
public class TreeEditJCheckBox {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Properties props = System.getProperties();&lt;br /&gt;
    JTree tree = new JTree(props);&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    JCheckBox checkBox = new JCheckBox(&amp;quot;To be or not to be&amp;quot;);&lt;br /&gt;
    TreeCellEditor editor = new DefaultCellEditor(checkBox);&lt;br /&gt;
    tree.setEditable(true);&lt;br /&gt;
    tree.setCellEditor(editor);&lt;br /&gt;
    &lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a DefaultCellEditor: JComboBox ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.swing.DefaultCellEditor;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.TreeCellEditor;&lt;br /&gt;
public class TreeEditJComboBox {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Properties props = System.getProperties();&lt;br /&gt;
    JTree tree = new JTree(props);&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    JComboBox comboBox = new JComboBox(new String[]{&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;C&amp;quot;});&lt;br /&gt;
    TreeCellEditor editor = new DefaultCellEditor(comboBox);&lt;br /&gt;
    tree.setEditable(true);&lt;br /&gt;
    tree.setCellEditor(editor);&lt;br /&gt;
    &lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a DefaultCellEditor: JTextField ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.swing.DefaultCellEditor;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.TreeCellEditor;&lt;br /&gt;
public class TreeEditJTextField {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Properties props = System.getProperties();&lt;br /&gt;
    JTree tree = new JTree(props);&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    JTextField textField = new JTextField();&lt;br /&gt;
    TreeCellEditor editor = new DefaultCellEditor(textField);&lt;br /&gt;
    tree.setEditable(true);&lt;br /&gt;
    tree.setCellEditor(editor);&lt;br /&gt;
    &lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating an Editor Just for Leaf Nodes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.event.ItemEvent;&lt;br /&gt;
import java.awt.event.ItemListener;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.util.EventObject;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.AbstractCellEditor;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import javax.swing.event.ChangeEvent;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellEditor;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeCellEditor;&lt;br /&gt;
import javax.swing.tree.TreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeNode;&lt;br /&gt;
import javax.swing.tree.TreePath;&lt;br /&gt;
class TreeNodeVector&amp;lt;E&amp;gt; extends Vector&amp;lt;E&amp;gt; {&lt;br /&gt;
  String name;&lt;br /&gt;
  TreeNodeVector(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  TreeNodeVector(String name, E elements[]) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    for (int i = 0, n = elements.length; i &amp;lt; n; i++) {&lt;br /&gt;
      add(elements[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;[&amp;quot; + name + &amp;quot;]&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class LeafCellEditor extends DefaultTreeCellEditor {&lt;br /&gt;
  public LeafCellEditor(JTree tree, DefaultTreeCellRenderer renderer, TreeCellEditor editor) {&lt;br /&gt;
    super(tree, renderer, editor);&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isCellEditable(EventObject event) {&lt;br /&gt;
    boolean returnValue = super.isCellEditable(event);&lt;br /&gt;
    if (returnValue) {&lt;br /&gt;
      Object node = tree.getLastSelectedPathComponent();&lt;br /&gt;
      if ((node != null) &amp;amp;&amp;amp; (node instanceof TreeNode)) {&lt;br /&gt;
        TreeNode treeNode = (TreeNode) node;&lt;br /&gt;
        returnValue = treeNode.isLeaf();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class CheckBoxNode {&lt;br /&gt;
  String text;&lt;br /&gt;
  boolean selected;&lt;br /&gt;
  public CheckBoxNode(String text, boolean selected) {&lt;br /&gt;
    this.text = text;&lt;br /&gt;
    this.selected = selected;&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isSelected() {&lt;br /&gt;
    return selected;&lt;br /&gt;
  }&lt;br /&gt;
  public void setSelected(boolean newValue) {&lt;br /&gt;
    selected = newValue;&lt;br /&gt;
  }&lt;br /&gt;
  public String getText() {&lt;br /&gt;
    return text;&lt;br /&gt;
  }&lt;br /&gt;
  public void setText(String newValue) {&lt;br /&gt;
    text = newValue;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return getClass().getName() + &amp;quot;[&amp;quot; + text + &amp;quot;/&amp;quot; + selected + &amp;quot;]&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class CheckBoxNodeRenderer implements TreeCellRenderer {&lt;br /&gt;
  private JCheckBox leafRenderer = new JCheckBox();&lt;br /&gt;
  private DefaultTreeCellRenderer nonLeafRenderer = new DefaultTreeCellRenderer();&lt;br /&gt;
  protected JCheckBox getLeafRenderer() {&lt;br /&gt;
    return leafRenderer;&lt;br /&gt;
  }&lt;br /&gt;
  public CheckBoxNodeRenderer() {&lt;br /&gt;
    Font fontValue;&lt;br /&gt;
    fontValue = UIManager.getFont(&amp;quot;Tree.font&amp;quot;);&lt;br /&gt;
    if (fontValue != null) {&lt;br /&gt;
      leafRenderer.setFont(fontValue);&lt;br /&gt;
    }&lt;br /&gt;
    Boolean booleanValue = (Boolean) UIManager.get(&amp;quot;Tree.drawsFocusBorderAroundIcon&amp;quot;);&lt;br /&gt;
    leafRenderer.setFocusPainted((booleanValue != null) &amp;amp;&amp;amp; (booleanValue.booleanValue()));&lt;br /&gt;
  }&lt;br /&gt;
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,&lt;br /&gt;
      boolean expanded, boolean leaf, int row, boolean hasFocus) {&lt;br /&gt;
    Component returnValue;&lt;br /&gt;
    if (leaf) {&lt;br /&gt;
      String stringValue = tree.convertValueToText(value, selected, expanded, leaf, row, false);&lt;br /&gt;
      leafRenderer.setText(stringValue);&lt;br /&gt;
      leafRenderer.setSelected(false);&lt;br /&gt;
      leafRenderer.setEnabled(tree.isEnabled());&lt;br /&gt;
      if ((value != null) &amp;amp;&amp;amp; (value instanceof DefaultMutableTreeNode)) {&lt;br /&gt;
        Object userObject = ((DefaultMutableTreeNode) value).getUserObject();&lt;br /&gt;
        if (userObject instanceof CheckBoxNode) {&lt;br /&gt;
          CheckBoxNode node = (CheckBoxNode) userObject;&lt;br /&gt;
          leafRenderer.setText(node.getText());&lt;br /&gt;
          leafRenderer.setSelected(node.isSelected());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      returnValue = leafRenderer;&lt;br /&gt;
    } else {&lt;br /&gt;
      returnValue = nonLeafRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,&lt;br /&gt;
          leaf, row, hasFocus);&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class CheckBoxNodeEditor extends AbstractCellEditor implements TreeCellEditor {&lt;br /&gt;
  CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer();&lt;br /&gt;
  ChangeEvent changeEvent = null;&lt;br /&gt;
  JTree tree;&lt;br /&gt;
  public CheckBoxNodeEditor(JTree tree) {&lt;br /&gt;
    this.tree = tree;&lt;br /&gt;
  }&lt;br /&gt;
  public Object getCellEditorValue() {&lt;br /&gt;
    JCheckBox checkbox = renderer.getLeafRenderer();&lt;br /&gt;
    CheckBoxNode checkBoxNode = new CheckBoxNode(checkbox.getText(), checkbox.isSelected());&lt;br /&gt;
    return checkBoxNode;&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isCellEditable(EventObject event) {&lt;br /&gt;
    boolean returnValue = false;&lt;br /&gt;
    if (event instanceof MouseEvent) {&lt;br /&gt;
      MouseEvent mouseEvent = (MouseEvent) event;&lt;br /&gt;
      TreePath path = tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY());&lt;br /&gt;
      if (path != null) {&lt;br /&gt;
        Object node = path.getLastPathComponent();&lt;br /&gt;
        if ((node != null) &amp;amp;&amp;amp; (node instanceof DefaultMutableTreeNode)) {&lt;br /&gt;
          DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node;&lt;br /&gt;
          Object userObject = treeNode.getUserObject();&lt;br /&gt;
          returnValue = ((treeNode.isLeaf()) &amp;amp;&amp;amp; (userObject instanceof CheckBoxNode));&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  public Component getTreeCellEditorComponent(JTree tree, Object value, boolean selected,&lt;br /&gt;
      boolean expanded, boolean leaf, int row) {&lt;br /&gt;
    Component editor = renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf,&lt;br /&gt;
        row, true);&lt;br /&gt;
    ItemListener itemListener = new ItemListener() {&lt;br /&gt;
      public void itemStateChanged(ItemEvent itemEvent) {&lt;br /&gt;
        if (stopCellEditing()) {&lt;br /&gt;
          fireEditingStopped();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    if (editor instanceof JCheckBox) {&lt;br /&gt;
      ((JCheckBox) editor).addItemListener(itemListener);&lt;br /&gt;
    }&lt;br /&gt;
    return editor;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class CheckBoxNodeTreeSample {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;CheckBox Tree&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    CheckBoxNode accessibilityOptions[] = { new CheckBoxNode(&amp;quot;A&amp;quot;, false),&lt;br /&gt;
        new CheckBoxNode(&amp;quot;B&amp;quot;, true) };&lt;br /&gt;
    CheckBoxNode browsingOptions[] = { new CheckBoxNode(&amp;quot;C&amp;quot;, true), new CheckBoxNode(&amp;quot;D&amp;quot;, true),&lt;br /&gt;
        new CheckBoxNode(&amp;quot;E&amp;quot;, true), new CheckBoxNode(&amp;quot;F&amp;quot;, false) };&lt;br /&gt;
    Vector&amp;lt;CheckBoxNode&amp;gt; accessVector = new TreeNodeVector&amp;lt;CheckBoxNode&amp;gt;(&amp;quot;G&amp;quot;, accessibilityOptions);&lt;br /&gt;
    Vector&amp;lt;CheckBoxNode&amp;gt; browseVector = new TreeNodeVector&amp;lt;CheckBoxNode&amp;gt;(&amp;quot;H&amp;quot;, browsingOptions);&lt;br /&gt;
    Object rootNodes[] = { accessVector, browseVector };&lt;br /&gt;
    Vector&amp;lt;Object&amp;gt; rootVector = new TreeNodeVector&amp;lt;Object&amp;gt;(&amp;quot;Root&amp;quot;, rootNodes);&lt;br /&gt;
    JTree tree = new JTree(rootVector);&lt;br /&gt;
    CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer();&lt;br /&gt;
    tree.setCellRenderer(renderer);&lt;br /&gt;
    tree.setCellEditor(new CheckBoxNodeEditor(tree));&lt;br /&gt;
    tree.setEditable(true);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a Proper ComboBox Editor for a Tree ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import javax.swing.DefaultCellEditor;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellEditor;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeCellEditor;&lt;br /&gt;
public class TreeEdit {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Object array[] = {Boolean.TRUE, Boolean.FALSE, &amp;quot;Hello&amp;quot;};&lt;br /&gt;
    JTree tree = new JTree(array);&lt;br /&gt;
    tree.setEditable(true);&lt;br /&gt;
    tree.setRootVisible(true);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();&lt;br /&gt;
    String elements[] = { &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;} ;&lt;br /&gt;
    JComboBox comboBox = new JComboBox(elements);&lt;br /&gt;
    comboBox.setEditable(true);&lt;br /&gt;
    TreeCellEditor comboEditor = new DefaultCellEditor(comboBox);&lt;br /&gt;
    TreeCellEditor editor = new DefaultTreeCellEditor(tree, renderer, comboEditor);&lt;br /&gt;
    tree.setCellEditor(editor);&lt;br /&gt;
&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Editing Tree Nodes with triple clicking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
public class TreeEdit {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Properties props = System.getProperties();&lt;br /&gt;
    JTree tree = new JTree(props);&lt;br /&gt;
    tree.setEditable(true);    &lt;br /&gt;
    &lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  extends JLabel implements TreeCellRenderer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.DefaultTreeModel;&lt;br /&gt;
import javax.swing.tree.TreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeModel;&lt;br /&gt;
public class TreeCellRendererImplementation extends JFrame {&lt;br /&gt;
  public TreeCellRendererImplementation() {&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(&amp;quot;+&amp;quot;);&lt;br /&gt;
    root.add(new DefaultMutableTreeNode(new Integer(3)));&lt;br /&gt;
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(&amp;quot;*&amp;quot;);&lt;br /&gt;
    node.add(new DefaultMutableTreeNode(&amp;quot;string&amp;quot;));&lt;br /&gt;
    node.add(new DefaultMutableTreeNode(new Short((short) 5)));&lt;br /&gt;
    root.add(node);&lt;br /&gt;
    TreeModel tm = new DefaultTreeModel(root);&lt;br /&gt;
    JTree tree = new JTree(tm);&lt;br /&gt;
    tree.setShowsRootHandles(true);&lt;br /&gt;
    tree.setCellRenderer(new MyRenderer());&lt;br /&gt;
    getContentPane().add(tree, BorderLayout.CENTER);&lt;br /&gt;
    setSize(400, 300);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  private class MyRenderer extends JLabel implements TreeCellRenderer {&lt;br /&gt;
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean isSelected,&lt;br /&gt;
        boolean isExpanded, boolean isLeaf, int row, boolean hasFocus) {&lt;br /&gt;
      Object userObject = ((DefaultMutableTreeNode) value).getUserObject();&lt;br /&gt;
      setText(value.toString() + &amp;quot; [&amp;quot; + userObject.getClass().getName() + &amp;quot;]&amp;quot;);&lt;br /&gt;
      return this;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TreeCellRendererImplementation m = new TreeCellRendererImplementation();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Flush the internal cache of Row height ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
public class TreeRowHeightCache {&lt;br /&gt;
  public static void main(String[] argv) {&lt;br /&gt;
    JTree tree = new JTree();&lt;br /&gt;
    if (tree.getRowHeight() &amp;lt;= 0) {&lt;br /&gt;
      tree.setRowHeight(1);&lt;br /&gt;
    }&lt;br /&gt;
    tree.setRowHeight(0);&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Image&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new JScrollPane(tree));&lt;br /&gt;
    frame.setSize(380, 320);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Getting Default TreeCellRenderer From JTree ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
class TreeNodeVector&amp;lt;E&amp;gt; extends Vector&amp;lt;E&amp;gt; {&lt;br /&gt;
  String name;&lt;br /&gt;
  TreeNodeVector(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  TreeNodeVector(String name, E elements[]) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    for (int i = 0, n = elements.length; i &amp;lt; n; i++) {&lt;br /&gt;
      add(elements[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;[&amp;quot; + name + &amp;quot;]&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class ChangingTreeCellRendererBackgroundForegroundColor {&lt;br /&gt;
  public static void main(final String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;JTreeSample&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Vector&amp;lt;String&amp;gt; v1 = new TreeNodeVector&amp;lt;String&amp;gt;(&amp;quot;Two&amp;quot;, new String[] { &amp;quot;Mercury&amp;quot;, &amp;quot;Venus&amp;quot;,&lt;br /&gt;
        &amp;quot;Mars&amp;quot; });&lt;br /&gt;
    Vector&amp;lt;Object&amp;gt; v2 = new TreeNodeVector&amp;lt;Object&amp;gt;(&amp;quot;Three&amp;quot;);&lt;br /&gt;
    v2.add(System.getProperties());&lt;br /&gt;
    v2.add(v1);&lt;br /&gt;
    Object rootNodes[] = {v1, v2 };&lt;br /&gt;
    Vector&amp;lt;Object&amp;gt; rootVector = new TreeNodeVector&amp;lt;Object&amp;gt;(&amp;quot;Root&amp;quot;, rootNodes);&lt;br /&gt;
    JTree tree = new JTree(rootVector);&lt;br /&gt;
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();&lt;br /&gt;
    Color backgroundSelection = renderer.getBackgroundSelectionColor();&lt;br /&gt;
    renderer.setBackgroundSelectionColor(renderer.getBackgroundNonSelectionColor());&lt;br /&gt;
    renderer.setBackgroundNonSelectionColor(backgroundSelection);&lt;br /&gt;
    Color textSelection = renderer.getTextSelectionColor();&lt;br /&gt;
    renderer.setTextSelectionColor(renderer.getTextNonSelectionColor());&lt;br /&gt;
    renderer.setTextNonSelectionColor(textSelection);&lt;br /&gt;
    &lt;br /&gt;
    frame.add(new JScrollPane(tree), BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rendering an image in a JTable column ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.table.AbstractTableModel;&lt;br /&gt;
import javax.swing.table.DefaultTableCellRenderer;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.getContentPane().setLayout(new BorderLayout());&lt;br /&gt;
    MyTableModel model = new MyTableModel();&lt;br /&gt;
    JTable table = new JTable(model);&lt;br /&gt;
    table.setRowHeight(80);&lt;br /&gt;
    table.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer());&lt;br /&gt;
    JScrollPane pane = new JScrollPane(table);&lt;br /&gt;
    frame.getContentPane().add(BorderLayout.CENTER, pane);&lt;br /&gt;
    frame.setSize(500, 400);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyTableModel extends AbstractTableModel {&lt;br /&gt;
  public Object getValueAt(int row, int column) {&lt;br /&gt;
    return &amp;quot;&amp;quot; + (row * column);&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return 4;&lt;br /&gt;
  }&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    return 5;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ImageRenderer extends DefaultTableCellRenderer {&lt;br /&gt;
  JLabel lbl = new JLabel();&lt;br /&gt;
  ImageIcon icon = new ImageIcon(getClass().getResource(&amp;quot;sample.png&amp;quot;));&lt;br /&gt;
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,&lt;br /&gt;
      boolean hasFocus, int row, int column) {&lt;br /&gt;
    lbl.setText((String) value);&lt;br /&gt;
    lbl.setIcon(icon);&lt;br /&gt;
    return lbl;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Setting the Activation Click Count for a Table Cell Editor in a JTable Component ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.util.EventObject;&lt;br /&gt;
import javax.swing.AbstractCellEditor;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.table.TableCellEditor;&lt;br /&gt;
import javax.swing.table.TableColumn;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JTable table = new JTable();&lt;br /&gt;
    TableColumn col = table.getColumnModel().getColumn(0);&lt;br /&gt;
    col.setCellEditor(new MyTableCellEditor());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {&lt;br /&gt;
  public boolean stopCellEditing() {&lt;br /&gt;
    String s = (String) getCellEditorValue();&lt;br /&gt;
    return super.stopCellEditing();&lt;br /&gt;
  }&lt;br /&gt;
  JTextField field = new JTextField();&lt;br /&gt;
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {&lt;br /&gt;
   &lt;br /&gt;
    return field;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public boolean isCellEditable(EventObject evt) {&lt;br /&gt;
      if (evt instanceof MouseEvent) {&lt;br /&gt;
          int clickCount;&lt;br /&gt;
          clickCount = 2;&lt;br /&gt;
          return ((MouseEvent)evt).getClickCount() &amp;gt;= clickCount;&lt;br /&gt;
      }&lt;br /&gt;
      return true;&lt;br /&gt;
  }&lt;br /&gt;
  public Object getCellEditorValue() {&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use UIManager to change the default icon for JTree ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Icon leafIcon = new ImageIcon(&amp;quot;leaf.gif&amp;quot;);&lt;br /&gt;
    Icon openIcon = new ImageIcon(&amp;quot;open.gif&amp;quot;);&lt;br /&gt;
    Icon closedIcon = new ImageIcon(&amp;quot;closed.gif&amp;quot;);&lt;br /&gt;
    UIManager.put(&amp;quot;Tree.leafIcon&amp;quot;, leafIcon);&lt;br /&gt;
    UIManager.put(&amp;quot;Tree.openIcon&amp;quot;, openIcon);&lt;br /&gt;
    UIManager.put(&amp;quot;Tree.closedIcon&amp;quot;, closedIcon);&lt;br /&gt;
    &lt;br /&gt;
    JTree tree = new JTree();&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.add(new JScrollPane(tree));&lt;br /&gt;
    f.setSize(300, 300);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Using DefaultTreeCellRenderer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
public class Main extends JFrame {&lt;br /&gt;
  private JTree m_simpleTree;&lt;br /&gt;
  private DefaultMutableTreeNode m_rootNode;&lt;br /&gt;
  public Main() {&lt;br /&gt;
    m_rootNode = new DefaultMutableTreeNode(&amp;quot;A&amp;quot;);&lt;br /&gt;
    DefaultMutableTreeNode enggNode = new DefaultMutableTreeNode(&amp;quot;B&amp;quot;);&lt;br /&gt;
    DefaultMutableTreeNode markNode = new DefaultMutableTreeNode(&amp;quot;C&amp;quot;);&lt;br /&gt;
    DefaultMutableTreeNode hrNode = new DefaultMutableTreeNode(&amp;quot;D&amp;quot;);&lt;br /&gt;
    m_rootNode.add(enggNode);&lt;br /&gt;
    m_rootNode.add(markNode);&lt;br /&gt;
    m_rootNode.add(hrNode);&lt;br /&gt;
    m_simpleTree = new JTree(m_rootNode);&lt;br /&gt;
    DefaultTreeCellRenderer cellRenderer = (DefaultTreeCellRenderer) m_simpleTree.getCellRenderer();&lt;br /&gt;
    cellRenderer.setOpenIcon(new ImageIcon(&amp;quot;open.gif&amp;quot;));&lt;br /&gt;
    cellRenderer.setClosedIcon(new ImageIcon(&amp;quot;closed.gif&amp;quot;));&lt;br /&gt;
    cellRenderer.setLeafIcon(new ImageIcon(&amp;quot;leaf.gif&amp;quot;));&lt;br /&gt;
    cellRenderer.setBackgroundNonSelectionColor(new Color(255, 255, 221));&lt;br /&gt;
    cellRenderer.setBackgroundSelectionColor(new Color(0, 0, 128));&lt;br /&gt;
    cellRenderer.setBorderSelectionColor(Color.black);&lt;br /&gt;
    cellRenderer.setTextSelectionColor(Color.white);&lt;br /&gt;
    cellRenderer.setTextNonSelectionColor(Color.blue);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(m_simpleTree);&lt;br /&gt;
    add(scrollPane);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] arg) {&lt;br /&gt;
    Main m = new Main();&lt;br /&gt;
    m.setVisible(true);&lt;br /&gt;
    m.setSize(new Dimension(450, 300));&lt;br /&gt;
    m.validate();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Working with Tree Tooltips: using a Tooltip Cell Renderer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.util.Dictionary;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.ToolTipManager;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.DefaultTreeCellRenderer;&lt;br /&gt;
import javax.swing.tree.TreeCellRenderer;&lt;br /&gt;
class ToolTipTreeCellRenderer implements TreeCellRenderer {&lt;br /&gt;
  DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();&lt;br /&gt;
  Dictionary tipTable;&lt;br /&gt;
  public ToolTipTreeCellRenderer(Dictionary tipTable) {&lt;br /&gt;
    this.tipTable = tipTable;&lt;br /&gt;
  }&lt;br /&gt;
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,&lt;br /&gt;
      boolean expanded, boolean leaf, int row, boolean hasFocus) {&lt;br /&gt;
    renderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);&lt;br /&gt;
    if (value != null) {&lt;br /&gt;
      Object tipKey;&lt;br /&gt;
      if (value instanceof DefaultMutableTreeNode) {&lt;br /&gt;
        tipKey = ((DefaultMutableTreeNode) value).getUserObject();&lt;br /&gt;
      } else {&lt;br /&gt;
        tipKey = tree.convertValueToText(value, selected, expanded, leaf, row, hasFocus);&lt;br /&gt;
      }&lt;br /&gt;
      renderer.setToolTipText((String) tipTable.get(tipKey));&lt;br /&gt;
    }&lt;br /&gt;
    return renderer;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class TreeTips {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Tree Tips&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Properties props = System.getProperties();&lt;br /&gt;
    JTree tree = new JTree(props);&lt;br /&gt;
    &lt;br /&gt;
    ToolTipManager.sharedInstance().registerComponent(tree);&lt;br /&gt;
    TreeCellRenderer renderer = new ToolTipTreeCellRenderer(props);&lt;br /&gt;
    &lt;br /&gt;
    tree.setCellRenderer(renderer);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(tree);&lt;br /&gt;
    frame.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>