001/* Panel.java -- Simple container object
002   Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038
039package java.awt;
040
041import javax.accessibility.Accessible;
042import javax.accessibility.AccessibleContext;
043import javax.accessibility.AccessibleRole;
044
045/**
046 * A panel is a simple container class. It's default layout is the
047 * <code>FlowLayout</code> manager.
048 *
049 * @author Aaron M. Renn (arenn@urbanophile.com)
050 * @author Eric Blake (ebb9@email.byu.edu)
051 * @see FlowLayout
052 * @since 1.0
053 * @status updated to 1.4
054 */
055public class Panel extends Container implements Accessible
056{
057  /**
058   * Compatible with JDK 1.0+.
059   */
060  private static final long serialVersionUID = -2728009084054400034L;
061
062  /** The cached accessible context. */
063  private transient AccessibleContext context;
064
065  /** Flag set when the first system-requested paint event is
066      dispatched. */
067  private transient boolean initialSystemUpdateDone;
068
069  /** Flag set when the first application-requested paint event is
070      consumed. */
071  private transient boolean initialUpdateConsumed;
072
073  /*
074   * The number used to generate the name returned by getName.
075   */
076  private static transient long next_panel_number;
077
078  /**
079   * Initializes a new instance of <code>Panel</code> that has a default
080   * layout manager of <code>FlowLayout</code>.
081   */
082  public Panel()
083  {
084    this(new FlowLayout());
085  }
086
087  /**
088   * Initializes a new instance of <code>Panel</code> with the specified
089   * layout manager.
090   *
091   * @param layoutManager the layout manager for this object
092   * @since 1.1
093   */
094  public Panel(LayoutManager layoutManager)
095  {
096    setLayout(layoutManager);
097  }
098
099  /**
100   * Notifies this object to create its native peer.
101   *
102   * @see #isDisplayable()
103   * @see #removeNotify()
104   */
105  public void addNotify()
106  {
107    if (peer == null)
108      peer = getToolkit().createPanel(this);
109    super.addNotify();
110  }
111
112  /**
113   * Gets the AccessibleContext associated with this panel, creating one if
114   * necessary. This always returns an instance of {@link AccessibleAWTPanel}.
115   *
116   * @return the accessibility context of this panel
117   * @since 1.3
118   */
119  public AccessibleContext getAccessibleContext()
120  {
121    if (context == null)
122      context = new AccessibleAWTPanel();
123    return context;
124  }
125
126  /**
127   * This class provides accessibility support for Panels, and is the
128   * runtime type returned by {@link #getAccessibleContext()}.
129   *
130   * @author Eric Blake (ebb9@email.byu.edu)
131   * @since 1.3
132   */
133  protected class AccessibleAWTPanel extends AccessibleAWTContainer
134  {
135    /**
136     * Compatible with JDK 1.4+.
137     */
138    private static final long serialVersionUID = -6409552226660031050L;
139
140    /**
141     * The default constructor.
142     */
143    protected AccessibleAWTPanel()
144    {
145    }
146
147    /**
148     * Get the role of this accessible object, a panel.
149     *
150     * @return the role of the object
151     * @see AccessibleRole#PANEL
152     */
153    public AccessibleRole getAccessibleRole()
154    {
155      return AccessibleRole.PANEL;
156    }
157  }
158
159  /**
160   * Generate a unique name for this panel.
161   *
162   * @return A unique name for this panel.
163   */
164  String generateName ()
165  {
166    return "panel" + getUniqueLong ();
167  }
168
169  private static synchronized long getUniqueLong ()
170  {
171    return next_panel_number++;
172  }
173}