1 /*
   2  * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package java.awt;
  26 
  27 import javax.accessibility.*;
  28 
  29 /**
  30  * <code>Panel</code> is the simplest container class. A panel
  31  * provides space in which an application can attach any other
  32  * component, including other panels.
  33  * <p>
  34  * The default layout manager for a panel is the
  35  * <code>FlowLayout</code> layout manager.
  36  *
  37  * @author      Sami Shaio
  38  * @see     java.awt.FlowLayout
  39  * @since   1.0
  40  */
  41 public class Panel extends Container implements Accessible {
  42     private static final String base = "panel";
  43     private static int nameCounter = 0;
  44 
  45     /*
  46      * JDK 1.1 serialVersionUID
  47      */
  48      private static final long serialVersionUID = -2728009084054400034L;
  49 
  50     /**
  51      * Creates a new panel using the default layout manager.
  52      * The default layout manager for all panels is the
  53      * <code>FlowLayout</code> class.
  54      */
  55     public Panel() {
  56         this(new FlowLayout());
  57     }
  58 
  59     /**
  60      * Creates a new panel with the specified layout manager.
  61      * @param layout the layout manager for this panel.
  62      * @since 1.1
  63      */
  64     public Panel(LayoutManager layout) {
  65         setLayout(layout);
  66     }
  67 
  68     /**
  69      * Construct a name for this component.  Called by getName() when the
  70      * name is null.
  71      */
  72     String constructComponentName() {
  73         synchronized (Panel.class) {
  74             return base + nameCounter++;
  75         }
  76     }
  77 
  78     /**
  79      * Creates the Panel's peer.  The peer allows you to modify the
  80      * appearance of the panel without changing its functionality.
  81      */
  82 
  83     public void addNotify() {
  84         synchronized (getTreeLock()) {
  85             if (peer == null)
  86                 peer = getComponentFactory().createPanel(this);
  87             super.addNotify();
  88         }
  89     }
  90 
  91 /////////////////
  92 // Accessibility support
  93 ////////////////
  94 
  95     /**
  96      * Gets the AccessibleContext associated with this Panel.
  97      * For panels, the AccessibleContext takes the form of an
  98      * AccessibleAWTPanel.
  99      * A new AccessibleAWTPanel instance is created if necessary.
 100      *
 101      * @return an AccessibleAWTPanel that serves as the
 102      *         AccessibleContext of this Panel
 103      * @since 1.3
 104      */
 105     public AccessibleContext getAccessibleContext() {
 106         if (accessibleContext == null) {
 107             accessibleContext = new AccessibleAWTPanel();
 108         }
 109         return accessibleContext;
 110     }
 111 
 112     /**
 113      * This class implements accessibility support for the
 114      * <code>Panel</code> class.  It provides an implementation of the
 115      * Java Accessibility API appropriate to panel user-interface elements.
 116      * @since 1.3
 117      */
 118     protected class AccessibleAWTPanel extends AccessibleAWTContainer {
 119 
 120         private static final long serialVersionUID = -6409552226660031050L;
 121 
 122         /**
 123          * Get the role of this object.
 124          *
 125          * @return an instance of AccessibleRole describing the role of the
 126          * object
 127          */
 128         public AccessibleRole getAccessibleRole() {
 129             return AccessibleRole.PANEL;
 130         }
 131     }
 132 
 133 }