1 /*
   2  * Copyright (c) 1998, 2013, 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 
  26 package javax.swing;
  27 
  28 import java.awt.Component;
  29 import java.awt.Container;
  30 
  31 
  32 /**
  33  * This interface is implemented by components that have a single
  34  * JRootPane child: JDialog, JFrame, JWindow, JApplet, JInternalFrame.
  35  * The methods in  this interface are just <i>covers</i> for the JRootPane
  36  * properties, e.g. <code>getContentPane()</code> is generally implemented
  37  * like this:<pre>
  38  *     public Container getContentPane() {
  39  *         return getRootPane().getContentPane();
  40  *     }
  41  * </pre>
  42  * This interface serves as a <i>marker</i> for Swing GUI builders
  43  * that need to treat components like JFrame, that contain a
  44  * single JRootPane, specially.  For example in a GUI builder,
  45  * dropping a component on a RootPaneContainer would be interpreted
  46  * as <code>frame.getContentPane().add(child)</code>.
  47  * <p>
  48  * As a convenience, the standard classes that implement this interface
  49  * (such as {@code JFrame}, {@code JDialog}, {@code JWindow}, {@code JApplet},
  50  * and {@code JInternalFrame}) have their {@code add}, {@code remove},
  51  * and {@code setLayout} methods overridden, so that they delegate calls
  52  * to the corresponding methods of the {@code ContentPane}.
  53  * For example, you can add a child component to a frame as follows:
  54  * <pre>
  55  *       frame.add(child);
  56  * </pre>
  57  * instead of:
  58  * <pre>
  59  *       frame.getContentPane().add(child);
  60  * </pre>
  61  * <p>
  62  * The behavior of the <code>add</code> and
  63  * <code>setLayout</code> methods for
  64  * <code>JFrame</code>, <code>JDialog</code>, <code>JWindow</code>,
  65  * <code>JApplet</code> and <code>JInternalFrame</code> is controlled by
  66  * the <code>rootPaneCheckingEnabled</code> property. If this property is
  67  * true (the default), then calls to these methods are
  68   * forwarded to the <code>contentPane</code>; if false, these
  69   * methods operate directly on the <code>RootPaneContainer</code>. This
  70   * property is only intended for subclasses, and is therefore protected.
  71  *
  72  * @see JRootPane
  73  * @see JFrame
  74  * @see JDialog
  75  * @see JWindow
  76  * @see JApplet
  77  * @see JInternalFrame
  78  *
  79  * @author Hans Muller
  80  */
  81 public interface RootPaneContainer
  82 {
  83     /**
  84      * Return this component's single JRootPane child.  A conventional
  85      * implementation of this interface will have all of the other
  86      * methods indirect through this one.  The rootPane has two
  87      * children: the glassPane and the layeredPane.
  88      *
  89      * @return this components single JRootPane child.
  90      * @see JRootPane
  91      */
  92     JRootPane getRootPane();
  93 
  94 
  95     /**
  96      * The "contentPane" is the primary container for application
  97      * specific components.  Applications should add children to
  98      * the contentPane, set its layout manager, and so on.
  99      * <p>
 100      * The contentPane may not be null.
 101      * <p>
 102      * Generally implemented with
 103      * <code>getRootPane().setContentPane(contentPane);</code>
 104      *
 105      * @exception java.awt.IllegalComponentStateException (a runtime
 106      *            exception) if the content pane parameter is null
 107      * @param contentPane the Container to use for the contents of this
 108      *        JRootPane
 109      * @see JRootPane#getContentPane
 110      * @see #getContentPane
 111      */
 112     void setContentPane(Container contentPane);
 113 
 114 
 115     /**
 116      * Returns the contentPane.
 117      *
 118      * @return the value of the contentPane property.
 119      * @see #setContentPane
 120      */
 121     Container getContentPane();
 122 
 123 
 124     /**
 125      * A Container that manages the contentPane and in some cases a menu bar.
 126      * The layeredPane can be used by descendants that want to add a child
 127      * to the RootPaneContainer that isn't layout managed.  For example
 128      * an internal dialog or a drag and drop effect component.
 129      * <p>
 130      * The layeredPane may not be null.
 131      * <p>
 132      * Generally implemented with<pre>
 133      *    getRootPane().setLayeredPane(layeredPane);</pre>
 134      *
 135      * @exception java.awt.IllegalComponentStateException (a runtime
 136      *            exception) if the layered pane parameter is null
 137      * @see #getLayeredPane
 138      * @see JRootPane#getLayeredPane
 139      */
 140     void setLayeredPane(JLayeredPane layeredPane);
 141 
 142 
 143     /**
 144      * Returns the layeredPane.
 145      *
 146      * @return the value of the layeredPane property.
 147      * @see #setLayeredPane
 148      */
 149     JLayeredPane getLayeredPane();
 150 
 151 
 152     /**
 153      * The glassPane is always the first child of the rootPane
 154      * and the rootPanes layout manager ensures that it's always
 155      * as big as the rootPane.  By default it's transparent and
 156      * not visible.  It can be used to temporarily grab all keyboard
 157      * and mouse input by adding listeners and then making it visible.
 158      * by default it's not visible.
 159      * <p>
 160      * The glassPane may not be null.
 161      * <p>
 162      * Generally implemented with
 163      * <code>getRootPane().setGlassPane(glassPane);</code>
 164      *
 165      * @see #getGlassPane
 166      * @see JRootPane#setGlassPane
 167      */
 168     void setGlassPane(Component glassPane);
 169 
 170 
 171     /**
 172      * Returns the glassPane.
 173      *
 174      * @return the value of the glassPane property.
 175      * @see #setGlassPane
 176      */
 177     Component getGlassPane();
 178 
 179 }