Sun Java Solaris Communities My SDN Account Join SDN
 
Tutorials & Code Camps

Program Challenge

 
New to Java Programming Center

Java Technology Fundamentals
February's Program Challenge
New to Java Programming Center

Java Platform Overview | Getting Started | Step-by-Step Programming
Learning Paths | References & Resources | Courses & Certification | Newsletters


For February's challenge, create a JTree that shows custom tool tip text over each tree cell.

A possible solution to the February 2005 Java Technology Fundamentals Program Challenge:

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.util.*;

public class TreeTips {
  public static void main(String args[]) {
    Runnable runner = new Runnable() {
      public void run() {
        JFrame frame = new JFrame("Tree Tips");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Properties props = System.getProperties();
        JTree tree = new JTree(props);
        ToolTipManager.sharedInstance().registerComponent(tree);
        TreeCellRenderer renderer = new ToolTipTreeCellRenderer(props);
        tree.setCellRenderer(renderer);
        JScrollPane scrollPane = new JScrollPane(tree);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300, 150);
        frame.setVisible(true);
      }
    };
    EventQueue.invokeLater(runner);
  }
}

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.util.*;

public class ToolTipTreeCellRenderer implements TreeCellRenderer {
  DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  Dictionary tipTable;

  public ToolTipTreeCellRenderer (Dictionary tipTable) {
    this.tipTable = tipTable;
  }

  public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean selected, boolean expanded, boolean leaf, int row, boolean
hasFocus) {
    renderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf,
row, hasFocus);
    if (value != null) {
      Object tipKey;
      if (value instanceof DefaultMutableTreeNode) {
        tipKey = ((DefaultMutableTreeNode)value).getUserObject();
      } else {
        tipKey = tree.convertValueToText(value, selected, expanded, leaf, row,
hasFocus);
      }
      renderer.setToolTipText(tipTable.get(tipKey));
    }
    return renderer;
  }
}