Source for javax.swing.plaf.metal.MetalScrollPaneUI

   1: /* MetalScrollPaneUI.java
   2:    Copyright (C) 2005 Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: 
  39: package javax.swing.plaf.metal;
  40: 
  41: import java.beans.PropertyChangeListener;
  42: 
  43: import javax.swing.JComponent;
  44: import javax.swing.JScrollBar;
  45: import javax.swing.JScrollPane;
  46: import javax.swing.plaf.ComponentUI;
  47: import javax.swing.plaf.basic.BasicScrollPaneUI;
  48: 
  49: /**
  50:  * A UI delegate for the {@link JScrollPane} component.
  51:  */
  52: public class MetalScrollPaneUI
  53:   extends BasicScrollPaneUI
  54: {
  55:   /**
  56:    * Constructs a new instance of <code>MetalScrollPaneUI</code>.
  57:    */
  58:   public MetalScrollPaneUI()
  59:   {
  60:     super();
  61:   }
  62: 
  63:   /**
  64:    * Returns a shared instance of <code>MetalScrollPaneUI</code>.
  65:    *
  66:    * @param component the component for which we return an UI instance
  67:    *
  68:    * @return A shared instance of <code>MetalScrollPaneUI</code>.
  69:    */
  70:   public static ComponentUI createUI(JComponent component)
  71:   {
  72:     return new MetalScrollPaneUI();
  73:   }
  74:   
  75:   /**
  76:    * Configures the specified component appropriate for the look and feel. 
  77:    * This method is invoked when the ComponentUI instance is being installed 
  78:    * as the UI delegate on the specified component. This method should 
  79:    * completely configure the component for the look and feel, 
  80:    * including the following:
  81:    * 1. Install any default property values for color, fonts, borders,
  82:    * icons, opacity, etc. on the component. Whenever possible, property
  83:    * values initialized by the client program should not be overridden.
  84:    * 2. Install a LayoutManager on the component if necessary.
  85:    * 3. Create/add any required sub-components to the component.
  86:    * 4. Create/install event listeners on the component.
  87:    * 5. Create/install a PropertyChangeListener on the component in order
  88:    * to detect and respond to component property changes appropriately.
  89:    * 6. Install keyboard UI (mnemonics, traversal, etc.) on the component.
  90:    * 7. Initialize any appropriate instance data. 
  91:    * 
  92:    * @param c - the component to install the ui on
  93:    */
  94:   public void installUI(JComponent c)
  95:   {
  96:     super.installUI(c);
  97:     JScrollBar hsb = scrollpane.getHorizontalScrollBar();
  98:     hsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE);
  99:     JScrollBar vsb = scrollpane.getVerticalScrollBar();
 100:     vsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE);
 101:   }
 102: 
 103:   /**
 104:    * Reverses configuration which was done on the specified component 
 105:    * during installUI. This method is invoked when this UIComponent 
 106:    * instance is being removed as the UI delegate for the specified 
 107:    * component. This method should undo the configuration performed in 
 108:    * installUI, being careful to leave the JComponent instance in a 
 109:    * clean state (no extraneous listeners, look-and-feel-specific property
 110:    *  objects, etc.). This should include the following:
 111:    *  1. Remove any UI-set borders from the component.
 112:    *  2. Remove any UI-set layout managers on the component.
 113:    *  3. Remove any UI-added sub-components from the component.
 114:    *  4. Remove any UI-added event/property listeners from the component.
 115:    *  5. Remove any UI-installed keyboard UI from the component.
 116:    *  6. Nullify any allocated instance data objects to allow for GC. 
 117:    *  
 118:    *  @param c - the component to uninstall the ui on
 119:    */
 120:   public void uninstallUI(JComponent c)
 121:   {
 122:     JScrollBar hsb = scrollpane.getHorizontalScrollBar();
 123:     hsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, null);
 124:     JScrollBar vsb = scrollpane.getVerticalScrollBar();
 125:     vsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, null);
 126:     super.uninstallUI(c);
 127:   }
 128: 
 129:   /**
 130:    * Installs listeners on scrollPane
 131:    * 
 132:    * @param scrollPane - the component to install the listeners on
 133:    */
 134:   public void installListeners(JScrollPane scrollPane)
 135:   {
 136:     super.installListeners(scrollPane);
 137:   }
 138:   
 139:   /**
 140:    * Uninstalls listeners on scrollPane
 141:    * 
 142:    * @param scrollPane - the component to uninstall the listeners on
 143:    */
 144:   public void uninstallListeners(JScrollPane scrollPane)
 145:   {
 146:     super.uninstallListeners(scrollPane);
 147:   }
 148: 
 149:   /**
 150:    * TODO
 151:    * 
 152:    * @return TODO
 153:    */
 154:   protected PropertyChangeListener createScrollBarSwapListener()
 155:   {
 156:     // FIXME: Anything else to do here?
 157:     return super.createPropertyChangeListener();
 158:   }
 159: }