home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / BasicTreeCellRenderer.java < prev    next >
Text File  |  1998-02-26  |  9KB  |  306 lines

  1. /*
  2.  * @(#)BasicTreeCellRenderer.java    1.16 98/02/02
  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. package com.sun.java.swing.plaf.basic;
  22.  
  23. import com.sun.java.swing.*;
  24. import java.awt.*;
  25. import java.awt.event.*;
  26. import java.beans.*;
  27. import java.io.*;
  28. import java.util.*;
  29. import com.sun.java.swing.tree.*;
  30.  
  31. /**
  32.  * Displays an entry in a tree.
  33.  * <p>
  34.  * Warning: serialized objects of this class will not be compatible with
  35.  * future swing releases.  The current serialization support is appropriate
  36.  * for short term storage or RMI between Swing1.0 applications.  It will
  37.  * not be possible to load serialized Swing1.0 objects with future releases
  38.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  39.  * baseline for the serialized form of Swing objects.
  40.  * @version 1.16 02/02/98
  41.  * @author Rob Davis
  42.  * @author Ray Ryan
  43.  * @author Scott Violet
  44.  */
  45. public class BasicTreeCellRenderer extends JLabel implements TreeCellRenderer
  46. {
  47.     /** Is the value currently selected. */
  48.     protected boolean selected;
  49.  
  50.     // Icons
  51.     /** Icon used to show non-leaf nodes that aren't expanded. */
  52.     transient protected Icon closedIcon;
  53.  
  54.     /** Icon used to show leaf nodes. */
  55.     transient protected Icon leafIcon;
  56.  
  57.     /** Icon used to show non-leaf nodes that are expanded. */
  58.     transient protected Icon openIcon;
  59.  
  60.     // Colors
  61.     /** Color to use for the foreground for selected nodes. */
  62.     protected Color textSelectionColor;
  63.  
  64.     /** Color to use for the foreground for non-selected nodes. */
  65.     protected Color textNonSelectionColor;
  66.  
  67.     /** Color to use for the background when a node is selected. */
  68.     protected Color backgroundSelectionColor;
  69.  
  70.     /** Color to use for the background when the node isn't selected. */
  71.     protected Color backgroundNonSelectionColor;
  72.  
  73.     /** Color to use for the background when the node isn't selected. */
  74.     protected Color borderSelectionColor;
  75.  
  76.     /**
  77.       * Returns a new instance of BasicTreeCellRenderer.  Alignment is
  78.       * set to left aligned.
  79.       */
  80.     public BasicTreeCellRenderer() {
  81.     setHorizontalAlignment(JLabel.LEFT);
  82.  
  83.     setLeafIcon(UIManager.getIcon("Tree.leafIcon"));
  84.     setClosedIcon(UIManager.getIcon("Tree.closedIcon"));
  85.     setOpenIcon(UIManager.getIcon("Tree.openIcon"));
  86.  
  87.     setTextSelectionColor(UIManager.getColor("Tree.textSelectionColor"));
  88.     setTextNonSelectionColor(UIManager.getColor("Tree.textNonSelectionColor"));
  89.     setBackgroundSelectionColor(UIManager.getColor("Tree.backgroundSelectionColor"));
  90.     setBackgroundNonSelectionColor(UIManager.getColor("Tree.backgroundNonSelectionColor"));
  91.     setBorderSelectionColor(UIManager.getColor("Tree.borderSelectionColor"));
  92.     }
  93.     
  94.     /**
  95.       * Returns the default icon used to represent non-leaf nodes that are expanded.
  96.       */
  97.     public Icon getDefaultOpenIcon() {
  98.     return openIcon;
  99.     }
  100.  
  101.     /**
  102.       * Returns the default icon used to represent non-leaf nodes that are not
  103.       * expanded.
  104.       */
  105.     public Icon getDefaultClosedIcon() {
  106.     return closedIcon;
  107.     }
  108.  
  109.     /**
  110.       * Returns the default icon used to represent leaf nodes.
  111.       */
  112.     public Icon getDefaultLeafIcon() {
  113.     return leafIcon;
  114.     }
  115.  
  116.     /**
  117.       * Sets the icon used to represent non-leaf nodes that are expanded.
  118.       */
  119.     public void setOpenIcon(Icon newIcon) {
  120.     openIcon = newIcon;
  121.     }
  122.  
  123.     /**
  124.       * Returns the icon used to represent non-leaf nodes that are expanded.
  125.       */
  126.     public Icon getOpenIcon() {
  127.     return openIcon;
  128.     }
  129.  
  130.     /**
  131.       * Sets the icon used to represent non-leaf nodes that are not expanded.
  132.       */
  133.     public void setClosedIcon(Icon newIcon) {
  134.     closedIcon = newIcon;
  135.     }
  136.  
  137.     /**
  138.       * Returns the icon used to represent non-leaf nodes that are not
  139.       * expanded.
  140.       */
  141.     public Icon getClosedIcon() {
  142.     return closedIcon;
  143.     }
  144.  
  145.     /**
  146.       * Sets the icon used to represent leaf nodes.
  147.       */
  148.     public void setLeafIcon(Icon newIcon) {
  149.     leafIcon = newIcon;
  150.     }
  151.  
  152.     /**
  153.       * Returns the icon used to represent leaf nodes.
  154.       */
  155.     public Icon getLeafIcon() {
  156.     return leafIcon;
  157.     }
  158.  
  159.     /**
  160.       * Sets the color the text is drawn with when the node is selected.
  161.       */
  162.     public void setTextSelectionColor(Color newColor) {
  163.     textSelectionColor = newColor;
  164.     }
  165.  
  166.     /**
  167.       * Returns the color the text is drawn with when the node is selected.
  168.       */
  169.     public Color getTextSelectionColor() {
  170.     return textSelectionColor;
  171.     }
  172.  
  173.     /**
  174.       * Sets the color the text is drawn with when the node isn't selected.
  175.       */
  176.     public void setTextNonSelectionColor(Color newColor) {
  177.     textNonSelectionColor = newColor;
  178.     }
  179.  
  180.     /**
  181.       * Returns the color the text is drawn with when the node isn't selected.
  182.       */
  183.     public Color getTextNonSelectionColor() {
  184.     return textNonSelectionColor;
  185.     }
  186.  
  187.     /**
  188.       * Sets the color to use for the background if node is selected.
  189.       */
  190.     public void setBackgroundSelectionColor(Color newColor) {
  191.     backgroundSelectionColor = newColor;
  192.     }
  193.  
  194.  
  195.     /**
  196.       * Returns the color to use for the background if node is selected.
  197.       */
  198.     public Color getBackgroundSelectionColor() {
  199.     return backgroundSelectionColor;
  200.     }
  201.  
  202.     /**
  203.       * Sets the background color to be used for non selected nodes.
  204.       */
  205.     public void setBackgroundNonSelectionColor(Color newColor) {
  206.     backgroundNonSelectionColor = newColor;
  207.     }
  208.  
  209.     /**
  210.       * Returns the background color to be used for non selected nodes.
  211.       */
  212.     public Color getBackgroundNonSelectionColor() {
  213.     return backgroundNonSelectionColor;
  214.     }
  215.  
  216.     /**
  217.       * Sets the color to use for the border.
  218.       */
  219.     public void setBorderSelectionColor(Color newColor) {
  220.     borderSelectionColor = newColor;
  221.     }
  222.  
  223.     /**
  224.       * Returns the color the border is drawn.
  225.       */
  226.     public Color getBorderSelectionColor() {
  227.     return borderSelectionColor;
  228.     }
  229.  
  230.  
  231.     /**
  232.       * Configures the renderer based on the passed in components.
  233.       * The value is set from messaging value with toString().
  234.       * The foreground color is set based on the selection and the icon
  235.       * is set based on on leaf and expanded.
  236.       */
  237.     public Component getTreeCellRendererComponent(JTree tree, Object value,
  238.                           boolean sel,
  239.                           boolean expanded,
  240.                           boolean leaf, int row,
  241.                           boolean hasFocus) {
  242.     String         stringValue = tree.convertValueToText(value, sel,
  243.                       expanded, leaf, row, hasFocus);
  244.  
  245.     setText(stringValue);
  246.     if(sel)
  247.         setForeground(getTextSelectionColor());
  248.     else
  249.         setForeground(getTextNonSelectionColor());
  250.     if (leaf) {
  251.         setIcon(getLeafIcon());
  252.     } else if (expanded) {
  253.         setIcon(getOpenIcon());
  254.     } else {
  255.         setIcon(getClosedIcon());
  256.     }
  257.         
  258.     selected = sel;
  259.  
  260.     return this;
  261.     }
  262.  
  263.     /**
  264.       * Paints the value.  The background is filled based on selected.
  265.       */
  266.     public void paint(Graphics g) {
  267.     Color bColor;
  268.  
  269.     if(selected) {
  270.         bColor = getBackgroundSelectionColor();
  271.     } else {
  272.         bColor = getBackgroundNonSelectionColor();
  273.         if(bColor == null)
  274.         bColor = getBackground();
  275.     }
  276.     if(bColor != null) {
  277.         Icon currentI = getIcon();
  278.  
  279.         g.setColor(bColor);
  280.         if(currentI != null && getText() != null) {
  281.         int offset = (currentI.getIconWidth() + getIconTextGap());
  282.  
  283.         g.fillRect(offset, 0, getWidth() - 1 - offset,
  284.                getHeight() - 1);
  285.         } else {
  286.         g.fillRect(0, 0, getWidth()-1, getHeight()-1);
  287.         }
  288.     }
  289.     if (selected) {
  290.         g.setColor(getBorderSelectionColor());
  291.         g.drawRect(0, 0, getWidth()-1, getHeight()-1);
  292.     }
  293.     super.paint(g);
  294.     }
  295.  
  296.     public Dimension getPreferredSize() {
  297.     Dimension        retDimension = super.getPreferredSize();
  298.  
  299.     if(retDimension != null)
  300.         retDimension = new Dimension(retDimension.width + 3,
  301.                      retDimension.height);
  302.     return retDimension;
  303.     }
  304.  
  305. }
  306.