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} 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} 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} class.
54      */
Panel()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      */
Panel(LayoutManager layout)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      */
constructComponentName()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 
addNotify()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      */
getAccessibleContext()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} 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          */
getAccessibleRole()128         public AccessibleRole getAccessibleRole() {
129             return AccessibleRole.PANEL;
130         }
131     }
132 
133 }
134