# HG changeset patch # User alexp # Date 1251816675 -14400 # Node ID b88af44d77a8dd35dc479b934e6136fe4210f3ce # Parent 760e072cc617dd89f3fadeabf8520cbfbc5b176e 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set Reviewed-by: rupashka diff -r 760e072cc617 -r b88af44d77a8 jdk/src/share/classes/javax/swing/JLayer.java --- a/jdk/src/share/classes/javax/swing/JLayer.java Tue Sep 01 15:34:21 2009 +0400 +++ b/jdk/src/share/classes/javax/swing/JLayer.java Tue Sep 01 18:51:15 2009 +0400 @@ -178,7 +178,7 @@ * @return the {@code JLayer}'s view component * or {@code null} if none exists * - * @see #setView(V) + * @see #setView(Component) */ public V getView() { return view; @@ -279,7 +279,7 @@ * @throws UnsupportedOperationException this method is not supported * * @see #setView(Component) - * @see #setGlassPane(Component) + * @see #setGlassPane(JPanel) */ protected void addImpl(Component comp, Object constraints, int index) { throw new UnsupportedOperationException( @@ -339,7 +339,7 @@ * @return false if {@code JLayer}'s {@code glassPane} is visible */ public boolean isOptimizedDrawingEnabled() { - return !glassPane.isVisible(); + return glassPane == null || !glassPane.isVisible(); } /** @@ -560,14 +560,20 @@ } } + /** + * {@inheritDoc} + */ public void addNotify() { + super.addNotify(); eventController.updateAWTEventListener(0, eventMask); - super.addNotify(); } + /** + * {@inheritDoc} + */ public void removeNotify() { + super.removeNotify(); eventController.updateAWTEventListener(eventMask, 0); - super.removeNotify(); } /** diff -r 760e072cc617 -r b88af44d77a8 jdk/src/share/classes/javax/swing/plaf/LayerUI.java --- a/jdk/src/share/classes/javax/swing/plaf/LayerUI.java Tue Sep 01 15:34:21 2009 +0400 +++ b/jdk/src/share/classes/javax/swing/plaf/LayerUI.java Tue Sep 01 18:51:15 2009 +0400 @@ -222,6 +222,7 @@ * Returns an array of all the listeners which have been associated * with the named property. * + * @param propertyName The name of the property being listened to * @return all of the {@code PropertyChangeListener}s associated with * the named property; if no such listeners have been added or * if {@code propertyName} is {@code null}, an empty @@ -262,6 +263,7 @@ /** * Returns the preferred size of the viewport for a view component. * + * @param l the {@code JLayer} component where this UI delegate is being installed * @return the preferred size of the viewport for a view component * @see Scrollable#getPreferredScrollableViewportSize() */ @@ -277,6 +279,10 @@ * that display logical rows or columns in order to completely expose * one block of rows or columns, depending on the value of orientation. * + * @param l the {@code JLayer} component where this UI delegate is being installed + * @param visibleRect The view area visible within the viewport + * @param orientation Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL. + * @param direction Less than zero to scroll up/left, greater than zero for down/right. * @return the "block" increment for scrolling in the specified direction * @see Scrollable#getScrollableBlockIncrement(Rectangle, int, int) */ @@ -296,6 +302,7 @@ * determine the height of the layer, unless the preferred height * of the layer is smaller than the height of the viewport. * + * @param l the {@code JLayer} component where this UI delegate is being installed * @return whether the layer should track the height of the viewport * @see Scrollable#getScrollableTracksViewportHeight() */ @@ -311,6 +318,7 @@ * determine the width of the layer, unless the preferred width * of the layer is smaller than the width of the viewport. * + * @param l the {@code JLayer} component where this UI delegate is being installed * @return whether the layer should track the width of the viewport * @see Scrollable * @see LayerUI#getScrollableTracksViewportWidth(JLayer) @@ -332,6 +340,10 @@ * Scrolling containers, like JScrollPane, will use this method * each time the user requests a unit scroll. * + * @param l the {@code JLayer} component where this UI delegate is being installed + * @param visibleRect The view area visible within the viewport + * @param orientation Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL. + * @param direction Less than zero to scroll up/left, greater than zero for down/right. * @return The "unit" increment for scrolling in the specified direction. * This value should always be positive. * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int) diff -r 760e072cc617 -r b88af44d77a8 jdk/test/javax/swing/JLayer/6875153/bug6875153.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JLayer/6875153/bug6875153.java Tue Sep 01 18:51:15 2009 +0400 @@ -0,0 +1,47 @@ +/* + * Copyright 2009 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 6875153 + * @summary JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set + * @author Alexander Potochkin + */ + +import javax.swing.*; + +public class bug6875153 { + + private static void createGui() { + JLayer layer = new JLayer(); + layer.setGlassPane(null); + layer.isOptimizedDrawingEnabled(); + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + bug6875153.createGui(); + } + }); + } +}