001    /* JPanel.java --
002       Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
003    
004    This file is part of GNU Classpath.
005    
006    GNU Classpath is free software; you can redistribute it and/or modify
007    it under the terms of the GNU General Public License as published by
008    the Free Software Foundation; either version 2, or (at your option)
009    any later version.
010    
011    GNU Classpath is distributed in the hope that it will be useful, but
012    WITHOUT ANY WARRANTY; without even the implied warranty of
013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    General Public License for more details.
015    
016    You should have received a copy of the GNU General Public License
017    along with GNU Classpath; see the file COPYING.  If not, write to the
018    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019    02110-1301 USA.
020    
021    Linking this library statically or dynamically with other modules is
022    making a combined work based on this library.  Thus, the terms and
023    conditions of the GNU General Public License cover the whole
024    combination.
025    
026    As a special exception, the copyright holders of this library give you
027    permission to link this library with independent modules to produce an
028    executable, regardless of the license terms of these independent
029    modules, and to copy and distribute the resulting executable under
030    terms of your choice, provided that you also meet, for each linked
031    independent module, the terms and conditions of the license of that
032    module.  An independent module is a module which is not derived from
033    or based on this library.  If you modify this library, you may extend
034    this exception to your version of the library, but you are not
035    obligated to do so.  If you do not wish to do so, delete this
036    exception statement from your version. */
037    
038    
039    package javax.swing;
040    
041    import java.awt.FlowLayout;
042    import java.awt.LayoutManager;
043    
044    import javax.accessibility.Accessible;
045    import javax.accessibility.AccessibleContext;
046    import javax.accessibility.AccessibleRole;
047    import javax.swing.plaf.PanelUI;
048    
049    /**
050     * An instance of JPanel can be added to a panel, frame etc
051     *
052     * @author Ronald Veldema (rveldema@cs.vu.nl)
053     */
054    public class JPanel extends JComponent implements Accessible
055    {
056      /**
057       * Provides accessibility support for <code>JPanel</code>.
058       *
059       * @author Roman Kennke (roman@kennke.org)
060       */
061      protected class AccessibleJPanel extends AccessibleJComponent
062      {
063        /**
064         * Creates a new instance of <code>AccessibleJPanel</code>.
065         */
066        protected AccessibleJPanel()
067        {
068          // Nothing to do here.
069        }
070    
071        /**
072         * Returns the accessible role for <code>JPanel</code>, which is
073         * {@link AccessibleRole#PANEL}.
074         *
075         * @return the accessible role for <code>JPanel</code>
076         */
077        public AccessibleRole getAccessibleRole()
078        {
079          return AccessibleRole.PANEL;
080        }
081      }
082    
083      /**
084       * Creates a new panel with a new instance of {@link FlowLayout} as the
085       * layout manager and double-buffering enabled.
086       */
087      public JPanel()
088      {
089        this(new FlowLayout(), true);
090      }
091    
092      /**
093       * Creates a new panel with double-buffering enabled or disabled as
094       * specified.  The default layout manager is an instance of
095       * {@link FlowLayout}.
096       *
097       * @param isDoubleBuffered  a flag that controls whether or not
098       *     double-buffering is enabled.
099       */
100      public JPanel(boolean isDoubleBuffered)
101      {
102        this(new FlowLayout(), isDoubleBuffered);
103      }
104    
105      /**
106       * Creates a new panel with the specified layout manager.  Double-buffering
107       * is enabled by default.
108       *
109       * @param layout  the layout manager (<code>null</code> permitted).
110       */
111      public JPanel(LayoutManager layout)
112      {
113        this(layout, true);
114      }
115    
116      /**
117       * Creates a new panel with the specified layout manager and
118       * double-buffering.
119       *
120       * @param layout  the layout manager (<code>null</code> permitted).
121       * @param isDoubleBuffered  a flag that controls whether or not
122       *     double-buffering is enabled.
123       */
124      public JPanel(LayoutManager layout, boolean isDoubleBuffered)
125      {
126        setLayout(layout);
127        setOpaque(true);
128        setDoubleBuffered(isDoubleBuffered);
129        updateUI();
130      }
131    
132      /**
133       * Returns the suffix (<code>"PanelUI"</code> in this case) used to
134       * determine the class name for a UI delegate that can provide the look and
135       * feel for a <code>JPanel</code>.
136       *
137       * @return <code>"PanelUI"</code>.
138       */
139      public String getUIClassID()
140      {
141        return "PanelUI";
142      }
143    
144      /**
145       * Sets the UI delegate for the <code>JPanel</code> component.
146       *
147       * @param ui  the UI delegate.
148       *
149       * @since 1.4
150       * @see #getUI()
151       */
152      public void setUI(PanelUI ui)
153      {
154        super.setUI(ui);
155      }
156    
157      /**
158       * Returns the UI delegate for the <code>JPanel</code> component.
159       *
160       * @return The UI delegate.
161       *
162       * @since 1.4
163       * @see #setUI(PanelUI)
164       */
165      public PanelUI getUI()
166      {
167        return (PanelUI) ui;
168      }
169    
170      /**
171       * Sets this panel's UI delegate to the default (obtained from the
172       * {@link UIManager}) for the current look and feel.
173       */
174      public void updateUI()
175      {
176        setUI((PanelUI) UIManager.getUI(this));
177      }
178    
179      /**
180       * Returns the object that provides accessibility features for this
181       * <code>JPanel</code> component.
182       *
183       * @return The accessible context (an instance of {@link AccessibleJPanel}).
184       */
185      public AccessibleContext getAccessibleContext()
186      {
187        if (accessibleContext == null)
188          accessibleContext = new AccessibleJPanel();
189        return accessibleContext;
190      }
191    
192      /**
193       * Returns an implementation-dependent string describing the attributes of
194       * this <code>JPanel</code>.
195       *
196       * @return A string describing the attributes of this <code>JPanel</code>
197       *         (never <code>null</code>).
198       */
199      protected String paramString()
200      {
201            return super.paramString();
202      }
203    }