diff --git a/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java b/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java index 8189567a855d8488eb37d4af6602d0481b636a99..36160420b81dcbe5ca0ce029e54f60615aaf04c9 100644 --- a/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java +++ b/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java @@ -1571,20 +1571,8 @@ public class BasicSliderUI extends SliderUI{ offset = 0; scrollTimer.stop(); - // This is the way we have to determine snap-to-ticks. It's - // hard to explain but since ChangeEvents don't give us any - // idea what has changed we don't have a way to stop the thumb - // bounds from being recalculated. Recalculating the thumb - // bounds moves the thumb over the current value (i.e., snapping - // to the ticks). - if (slider.getSnapToTicks() /*|| slider.getSnapToValue()*/ ) { - isDragging = false; - slider.setValueIsAdjusting(false); - } - else { - slider.setValueIsAdjusting(false); - isDragging = false; - } + isDragging = false; + slider.setValueIsAdjusting(false); slider.repaint(); } diff --git a/test/javax/swing/JSlider/6848475/bug6848475.java b/test/javax/swing/JSlider/6848475/bug6848475.java new file mode 100644 index 0000000000000000000000000000000000000000..e6841f2ec92412c429cf2058ebd556670655b60a --- /dev/null +++ b/test/javax/swing/JSlider/6848475/bug6848475.java @@ -0,0 +1,126 @@ +/* + * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @bug 6848475 + * @summary JSlider does not display the correct value of its BoundedRangeModel + * @author Pavel Porvatov + * @run main bug6848475 + */ + +import sun.awt.SunToolkit; + +import javax.swing.*; +import javax.swing.plaf.SliderUI; +import javax.swing.plaf.basic.BasicSliderUI; +import java.awt.*; +import java.awt.event.InputEvent; +import java.lang.reflect.Field; + +public class bug6848475 { + private static JFrame frame; + + private static JSlider slider; + + private static Robot robot; + + private static int thumbRectX; + + public static void main(String[] args) throws Exception { + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + robot = new Robot(); + robot.setAutoDelay(100); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + frame = new JFrame(); + + DefaultBoundedRangeModel sliderModel = new DefaultBoundedRangeModel() { + public void setValue(int n) { + // Don't allow value to be changed + } + }; + + slider = new JSlider(sliderModel); + + frame.getContentPane().add(slider); + frame.pack(); + frame.setVisible(true); + } + }); + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + Point p = slider.getLocationOnScreen(); + + robot.mouseMove(p.x, p.y); + } + }); + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + thumbRectX = getThumbRectField().x; + + Point p = slider.getLocationOnScreen(); + + robot.mouseMove(p.x, p.y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseMove(p.x + 20, p.y); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + }); + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + Rectangle newThumbRect = getThumbRectField(); + + if (newThumbRect.x != thumbRectX) { + throw new RuntimeException("Test failed: the thumb was moved"); + } + + frame.dispose(); + } + }); + } + + private static Rectangle getThumbRectField() { + try { + SliderUI ui = slider.getUI(); + + Field field = BasicSliderUI.class.getDeclaredField("thumbRect"); + + field.setAccessible(true); + + return (Rectangle) field.get(ui); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +}