home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / SampleTreeCellRenderer.java < prev    next >
Text File  |  1998-05-08  |  4KB  |  134 lines

  1. /*
  2.  * @(#)SampleTreeCellRenderer.java    1.8 98/01/07
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21. import com.sun.java.swing.Icon;
  22. import com.sun.java.swing.ImageIcon;
  23. import com.sun.java.swing.JLabel;
  24. import com.sun.java.swing.JTree;
  25. import com.sun.java.swing.tree.TreeCellRenderer;
  26. import com.sun.java.swing.tree.DefaultMutableTreeNode;
  27. import java.awt.Component;
  28. import java.awt.Color;
  29. import java.awt.Font;
  30. import java.awt.Graphics;
  31.  
  32. public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
  33. {
  34.     /** Font used if the string to be displayed isn't a font. */
  35.     static protected Font             defaultFont;
  36.     /** Icon to use when the item is collapsed. */
  37.     static protected ImageIcon        collapsedIcon;
  38.     /** Icon to use when the item is expanded. */
  39.     static protected ImageIcon        expandedIcon;
  40.  
  41.     /** Color to use for the background when selected. */
  42.     static protected final Color SelectedBackgroundColor = Color.yellow;//new Color(0, 0, 128);
  43.  
  44.     static
  45.     {
  46.     try {
  47.         defaultFont = new Font("SansSerif", 0, 12);
  48.     } catch (Exception e) {}
  49.     try {
  50.         collapsedIcon = new ImageIcon("images/collapsed.gif");
  51.         expandedIcon = new ImageIcon("images/expanded.gif");
  52.     } catch (Exception e) {
  53.         System.out.println("Couldn't load images: " + e);
  54.     }
  55.     }
  56.  
  57.     /** Whether or not the item that was last configured is selected. */
  58.     protected boolean            selected;
  59.  
  60.     /**
  61.       * This is messaged from JTree whenever it needs to get the size
  62.       * of the component or it wants to draw it.
  63.       * This attempts to set the font based on value, which will be
  64.       * a TreeNode.
  65.       */
  66.     public Component getTreeCellRendererComponent(JTree tree, Object value,
  67.                       boolean selected, boolean expanded,
  68.                       boolean leaf, int row,
  69.                           boolean hasFocus) {
  70.     Font            font;
  71.     String          stringValue = tree.convertValueToText(value, selected,
  72.                        expanded, leaf, row, hasFocus);
  73.  
  74.     /* Set the text. */
  75.     setText(stringValue);
  76.     /* Tooltips used by the tree. */
  77.     setToolTipText(stringValue);
  78.  
  79.     /* Set the image. */
  80.     if(expanded)
  81.         setIcon(expandedIcon);
  82.     else if(!leaf)
  83.         setIcon(collapsedIcon);
  84.     else
  85.         setIcon(null);
  86.  
  87.     /* Set the color and the font based on the SampleData userObject. */
  88.     SampleData         userObject = (SampleData)((DefaultMutableTreeNode)value)
  89.                                     .getUserObject();
  90.     if(hasFocus)
  91.         setForeground(Color.cyan);
  92.     else
  93.         setForeground(userObject.getColor());
  94.     if(userObject.getFont() == null)
  95.         setFont(defaultFont);
  96.     else
  97.         setFont(userObject.getFont());
  98.  
  99.     /* Update the selected flag for the next paint. */
  100.     this.selected = selected;
  101.  
  102.     return this;
  103.     }
  104.  
  105.     /**
  106.       * paint is subclassed to draw the background correctly.  JLabel
  107.       * currently does not allow backgrounds other than white, and it
  108.       * will also fill behind the icon.  Something that isn't desirable.
  109.       */
  110.     public void paint(Graphics g) {
  111.     Color            bColor;
  112.     Icon             currentI = getIcon();
  113.  
  114.     if(selected)
  115.         bColor = SelectedBackgroundColor;
  116.     else if(getParent() != null)
  117.         /* Pick background color up from parent (which will come from
  118.            the JTree we're contained in). */
  119.         bColor = getParent().getBackground();
  120.     else
  121.         bColor = getBackground();
  122.     g.setColor(bColor);
  123.     if(currentI != null && getText() != null) {
  124.         int          offset = (currentI.getIconWidth() + getIconTextGap());
  125.  
  126.         g.fillRect(offset, 0, getWidth() - 1 - offset,
  127.                getHeight() - 1);
  128.     }
  129.     else
  130.         g.fillRect(0, 0, getWidth()-1, getHeight()-1);
  131.     super.paint(g);
  132.     }
  133. }
  134.