While playing with the Metal JSlider implementation I noticed, that the
sliders were also movable when disabled. This is of course wrong. I
fixed that using the attached patch.

2006-03-14  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/plaf/basic/BasicSliderUI.java
        (TrackListener.mouseDragged): Only process event when slider is
        enabled.
        (TrackListener.mouseReleased): Only process event when slider is
        enabled.
        (TrackListener.mousePressed): Only process event when slider is
        enabled.

/Roman
Index: javax/swing/plaf/basic/BasicSliderUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicSliderUI.java,v
retrieving revision 1.22
diff -u -r1.22 BasicSliderUI.java
--- javax/swing/plaf/basic/BasicSliderUI.java	12 Oct 2005 12:10:00 -0000	1.22
+++ javax/swing/plaf/basic/BasicSliderUI.java	14 Mar 2006 20:13:17 -0000
@@ -364,17 +364,20 @@
      */
     public void mouseDragged(MouseEvent e)
     {
-      currentMouseX = e.getX();
-      currentMouseY = e.getY();
-      if (slider.getValueIsAdjusting())
+      if (slider.isEnabled())
         {
-	  int value;
-	  if (slider.getOrientation() == JSlider.HORIZONTAL)
-	    value = valueForXPosition(currentMouseX) - offset;
-	  else
-	    value = valueForYPosition(currentMouseY) - offset;
+          currentMouseX = e.getX();
+          currentMouseY = e.getY();
+          if (slider.getValueIsAdjusting())
+            {
+              int value;
+              if (slider.getOrientation() == JSlider.HORIZONTAL)
+                value = valueForXPosition(currentMouseX) - offset;
+              else
+                value = valueForYPosition(currentMouseY) - offset;
 
-	  slider.setValue(value);
+              slider.setValue(value);
+            }
         }
     }
 
@@ -399,32 +402,35 @@
      */
     public void mousePressed(MouseEvent e)
     {
-      currentMouseX = e.getX();
-      currentMouseY = e.getY();
-
-      int value;
-      if (slider.getOrientation() == JSlider.HORIZONTAL)
-	value = valueForXPosition(currentMouseX);
-      else
-	value = valueForYPosition(currentMouseY);
-
-      if (slider.getSnapToTicks())
-	value = findClosestTick(value);
-
-      // If the thumb is hit, then we don't need to set the timers to move it. 
-      if (! thumbRect.contains(e.getPoint()))
-        {
-	  // The mouse has hit some other part of the slider.
-	  // The value moves no matter where in the slider you hit.
-	  if (value > slider.getValue())
-	    scrollDueToClickInTrack(POSITIVE_SCROLL);
-	  else
-	    scrollDueToClickInTrack(NEGATIVE_SCROLL);
-        }
-      else
+      if (slider.isEnabled())
         {
-	  slider.setValueIsAdjusting(true);
-	  offset = value - slider.getValue();
+          currentMouseX = e.getX();
+          currentMouseY = e.getY();
+
+          int value;
+          if (slider.getOrientation() == JSlider.HORIZONTAL)
+            value = valueForXPosition(currentMouseX);
+          else
+            value = valueForYPosition(currentMouseY);
+
+          if (slider.getSnapToTicks())
+            value = findClosestTick(value);
+
+          // If the thumb is hit, then we don't need to set the timers to move it. 
+          if (! thumbRect.contains(e.getPoint()))
+            {
+              // The mouse has hit some other part of the slider.
+              // The value moves no matter where in the slider you hit.
+              if (value > slider.getValue())
+                scrollDueToClickInTrack(POSITIVE_SCROLL);
+              else
+                scrollDueToClickInTrack(NEGATIVE_SCROLL);
+            }
+          else
+            {
+              slider.setValueIsAdjusting(true);
+              offset = value - slider.getValue();
+            }
         }
     }
 
@@ -436,17 +442,20 @@
      */
     public void mouseReleased(MouseEvent e)
     {
-      currentMouseX = e.getX();
-      currentMouseY = e.getY();
-
-      if (slider.getValueIsAdjusting())
+      if (slider.isEnabled())
         {
-	  slider.setValueIsAdjusting(false);
-	  if (slider.getSnapToTicks())
-	    slider.setValue(findClosestTick(slider.getValue()));
+          currentMouseX = e.getX();
+          currentMouseY = e.getY();
+
+          if (slider.getValueIsAdjusting())
+            {
+              slider.setValueIsAdjusting(false);
+              if (slider.getSnapToTicks())
+                slider.setValue(findClosestTick(slider.getValue()));
+            }
+          if (scrollTimer != null)
+            scrollTimer.stop();
         }
-      if (scrollTimer != null)
-	scrollTimer.stop();
     }
 
     /**

Reply via email to