From 2dbe14ef7ef576990dff6897320da3471cbfbcc5 Mon Sep 17 00:00:00 2001 From: Anton Nashatyrev Date: Thu, 3 Jul 2014 18:47:42 +0400 Subject: [PATCH] 8044371: setOneTouchExpandable functionality of JSplitPane will reduce vertical Scrollbar Reviewed-by: alexp, alexsch --- .../classes/javax/swing/ScrollPaneLayout.java | 10 +-- .../javax/swing/JScrollPane/bug8044371.java | 88 +++++++++++++++++++ 2 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 jdk/test/javax/swing/JScrollPane/bug8044371.java diff --git a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java index 4d353253a3c..7903b85958b 100644 --- a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java +++ b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java @@ -823,10 +823,7 @@ public class ScrollPaneLayout Rectangle vsbR = new Rectangle(0, availR.y - vpbInsets.top, 0, 0); boolean vsbNeeded; - if (isEmpty) { - vsbNeeded = false; - } - else if (vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS) { + if (vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS) { vsbNeeded = true; } else if (vsbPolicy == VERTICAL_SCROLLBAR_NEVER) { @@ -849,10 +846,7 @@ public class ScrollPaneLayout Rectangle hsbR = new Rectangle(availR.x - vpbInsets.left, 0, 0, 0); boolean hsbNeeded; - if (isEmpty) { - hsbNeeded = false; - } - else if (hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS) { + if (hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS) { hsbNeeded = true; } else if (hsbPolicy == HORIZONTAL_SCROLLBAR_NEVER) { diff --git a/jdk/test/javax/swing/JScrollPane/bug8044371.java b/jdk/test/javax/swing/JScrollPane/bug8044371.java new file mode 100644 index 00000000000..2e83385fb8d --- /dev/null +++ b/jdk/test/javax/swing/JScrollPane/bug8044371.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8044371 + * @summary setOneTouchExpandable functionality of JSplitPane will reduce vertical Scrollbar + * @author Anton Nashatyrev + * @library .. + */ + + +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.awt.*; +import java.awt.event.AdjustmentEvent; +import java.awt.event.AdjustmentListener; + +public class bug8044371 implements AdjustmentListener { + JSplitPane sptPane; + int lastAdjust = 0; + int initialAdjust = 0; + + public static void main(String[] args) throws Throwable { + UIManager.setLookAndFeel(MetalLookAndFeel.class.getName()); + SwingTest.start(bug8044371.class); + } + + public bug8044371(JFrame frame) { + JPanel p = new JPanel(); + final JScrollPane jScrollPane = new JScrollPane(new JPanel() + {{setPreferredSize(new Dimension(1500,1500));}}, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + jScrollPane.getViewport().scrollRectToVisible(new Rectangle(1500, 1500, 0, 0)); + jScrollPane.getVerticalScrollBar().addAdjustmentListener(this); + + sptPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jScrollPane, p); + sptPane.setDividerLocation(90); + sptPane.setOneTouchExpandable(true); + frame.getContentPane().add(sptPane); + } + + public void adjustmentValueChanged(AdjustmentEvent e) { + System.out.println( "adjustmentValueChanged: " + e.getValue()); + lastAdjust = e.getValue(); + } + + public void step1() { + if (lastAdjust == 0) { + throw new RuntimeException("Adjustment == 0"); + } + initialAdjust = lastAdjust; + sptPane.setDividerLocation(0); + } + + public void step2() { + if (lastAdjust < initialAdjust) { + throw new RuntimeException("Failed: Adjustment decreased: " + lastAdjust); + } + sptPane.setDividerLocation(90); + } + public void step3() { + if (lastAdjust < initialAdjust) { + throw new RuntimeException("Failed: Adjustment decreased: " + lastAdjust); + } + } +}