arcgissamples\scenario\toc\TocTreeRenderer.java
/* Copyright 2010 ESRI * * All rights reserved under the copyright laws of the United States * and applicable international laws, treaties, and conventions. * * You may freely redistribute and use this sample code, with or * without modification, provided you include the original copyright * notice and use restrictions. * * See the use restrictions. * */ package arcgissamples.scenario.toc; /**Class which defines custom renderer for TocControl. * Implements javax.swing.tree.TreeCellRenderer. */ import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; public class TocTreeRenderer implements javax.swing.tree.TreeCellRenderer { //CheckBoxPanel for displaying checkbox and layername CheckBoxPanel checkboxPanel = null; //LabelPanel to display mapframe title. LabelPanel labelPanel = null; //Default label to display if the node is neither a layer node nor mapframe node. JLabel label; //Mapframe icon. Icon mapFrameIcon = null; public TocTreeRenderer() { //Instantiate all classes checkboxPanel = new CheckBoxPanel(); labelPanel = new LabelPanel(); //Create mapframe icon using the layers_2.gif mapFrameIcon = new javax.swing.ImageIcon( getClass().getResource( "/arcgissamples/scenario/icons/layers_2.gif")); //Create a label label = new JLabel(); } /** Method which returns the component based on the node type. * If node is of type of map frame then the LabelPanel is used. * LabelPanel is set with the mapframe icon and the title. * If the node is of type layer, then a check box panel is used with check box * to display the visibility of the layer and the check box label is set with the * layer name. * Note : When a visibility of layer is changed, this method is called as a result * of nodechanged event. The check box value is set based on the layer visibility. * @see javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent * (JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) * @param tree * @param value * @param sel * @param expanded * @param leaf * @param row * @param hasFocus * @return */ public java.awt.Component getTreeCellRendererComponent(javax.swing.JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { //Get the string value of the selected node. String stringValue = tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus); //Get the path of the current node. javax.swing.tree.TreePath treePath = tree.getPathForRow(row); //Check if it is null. If so return the default label. if (treePath == null) return label; //Get node which is of type defaultmutable node. DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent(); //If it is map frame node. if (treePath.getPathCount() == 2) { //set the map frame icon labelPanel.setIcon(mapFrameIcon); //set the title labelPanel.setText(stringValue); return labelPanel; } //If it is a layer node. if (node instanceof LayerNode) { //Get the visibility of the layer boolean isVisible = ( (LayerNode) node).isVisible(); //set the checkbox value based on the layer visibility checkboxPanel.setSelected(isVisible); //set the layer name checkboxPanel.setText(stringValue); return checkboxPanel; } //If not mapframe node or layer node return the default label. return label; } }