1. /*
  2. * @(#)MetalScrollPaneUI.java 1.11 01/11/29
  3. *
  4. * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing.plaf.metal;
  8. import javax.swing.*;
  9. import javax.swing.event.*;
  10. import javax.swing.border.*;
  11. import javax.swing.plaf.*;
  12. import javax.swing.plaf.basic.*;
  13. import java.awt.*;
  14. import java.beans.*;
  15. import java.awt.event.*;
  16. /**
  17. * A Metal L&F implementation of ScrollPaneUI.
  18. * <p>
  19. * <strong>Warning:</strong>
  20. * Serialized objects of this class will not be compatible with
  21. * future Swing releases. The current serialization support is appropriate
  22. * for short term storage or RMI between applications running the same
  23. * version of Swing. A future release of Swing will provide support for
  24. * long term persistence.
  25. *
  26. * @1.11 11/29/01
  27. * @author Steve Wilson
  28. */
  29. public class MetalScrollPaneUI extends BasicScrollPaneUI
  30. {
  31. private PropertyChangeListener scrollBarSwapListener;
  32. public static ComponentUI createUI(JComponent x) {
  33. return new MetalScrollPaneUI();
  34. }
  35. public void installUI(JComponent c) {
  36. super.installUI(c);
  37. JScrollPane sp = (JScrollPane)c;
  38. JScrollBar hsb = sp.getHorizontalScrollBar();
  39. JScrollBar vsb = sp.getVerticalScrollBar();
  40. hsb.putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE);
  41. vsb.putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE);
  42. }
  43. public void uninstallUI(JComponent c) {
  44. super.uninstallUI(c);
  45. JScrollPane sp = (JScrollPane)c;
  46. JScrollBar hsb = sp.getHorizontalScrollBar();
  47. JScrollBar vsb = sp.getVerticalScrollBar();
  48. hsb.putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP, null);
  49. vsb.putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP, null);
  50. }
  51. public void installListeners(JScrollPane scrollPane) {
  52. super.installListeners(scrollPane);
  53. scrollBarSwapListener = createScrollBarSwapListener();
  54. scrollPane.addPropertyChangeListener(scrollBarSwapListener);
  55. }
  56. public void uninstallListeners(JScrollPane scrollPane) {
  57. super.uninstallListeners(scrollPane);
  58. scrollPane.removePropertyChangeListener(scrollBarSwapListener);
  59. }
  60. protected PropertyChangeListener createScrollBarSwapListener() {
  61. return new PropertyChangeListener() {
  62. public void propertyChange(PropertyChangeEvent e) {
  63. String propertyName = e.getPropertyName();
  64. if (propertyName.equals("verticalScrollBar") ||
  65. propertyName.equals("horizontalScrollBar")) {
  66. ((JScrollBar)e.getOldValue()).putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP,
  67. null);
  68. ((JScrollBar)e.getNewValue()).putClientProperty( MetalScrollBarUI.FREE_STANDING_PROP,
  69. Boolean.FALSE);
  70. }
  71. }};
  72. }
  73. }