001 /* JApplet.java --
002 Copyright (C) 2002, 2004, 2005 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.applet.Applet;
042 import java.awt.BorderLayout;
043 import java.awt.Component;
044 import java.awt.Container;
045 import java.awt.Dimension;
046 import java.awt.Graphics;
047 import java.awt.LayoutManager;
048 import java.awt.event.KeyEvent;
049
050 import javax.accessibility.Accessible;
051 import javax.accessibility.AccessibleContext;
052
053 /**
054 * A top-level container that is usually used in web browsers.
055 *
056 * @author original author unknown
057 */
058 public class JApplet extends Applet
059 implements RootPaneContainer, Accessible
060 {
061 /**
062 * Provides accessibility support for <code>JApplet</code>.
063 */
064 protected class AccessibleJApplet extends Applet.AccessibleApplet
065 {
066 /**
067 * Creates a new instance of <code>AccessibleJApplet</code>.
068 */
069 protected AccessibleJApplet()
070 {
071 super();
072 // Nothing to do here.
073 }
074 }
075
076 /**
077 * The accessible context for this <code>JApplet</code>.
078 */
079 protected AccessibleContext accessibleContext;
080
081 private static final long serialVersionUID = 7269359214497372587L;
082
083 protected JRootPane rootPane;
084
085 /**
086 * @specnote rootPaneCheckingEnabled is false to comply with J2SE 5.0
087 */
088 protected boolean rootPaneCheckingEnabled = false;
089
090 public JApplet()
091 {
092 super.setLayout(new BorderLayout(1, 1));
093 getRootPane(); // Will do set/create.
094 setRootPaneCheckingEnabled(true); // Init stage is now over.
095 }
096
097 public Dimension getPreferredSize()
098 {
099 return super.getPreferredSize();
100 }
101
102 public void setLayout(LayoutManager manager)
103 {
104 // Check if we're in initialization stage. If so, call super.setLayout
105 // otherwise, valid calls go to the content pane
106 if (isRootPaneCheckingEnabled())
107 getContentPane().setLayout(manager);
108 else
109 super.setLayout(manager);
110 }
111
112 public void setLayeredPane(JLayeredPane layeredPane)
113 {
114 getRootPane().setLayeredPane(layeredPane);
115 }
116
117 public JLayeredPane getLayeredPane()
118 {
119 return getRootPane().getLayeredPane();
120 }
121
122 public JRootPane getRootPane()
123 {
124 if (rootPane == null)
125 setRootPane(createRootPane());
126 return rootPane;
127 }
128
129 protected void setRootPane(JRootPane root)
130 {
131 if (rootPane != null)
132 remove(rootPane);
133
134 rootPane = root;
135 add(rootPane, BorderLayout.CENTER);
136 }
137
138 protected JRootPane createRootPane()
139 {
140 return new JRootPane();
141 }
142
143 public Container getContentPane()
144 {
145 return getRootPane().getContentPane();
146 }
147
148 public void setContentPane(Container contentPane)
149 {
150 getRootPane().setContentPane(contentPane);
151 }
152
153 public Component getGlassPane()
154 {
155 return getRootPane().getGlassPane();
156 }
157
158 public void setGlassPane(Component glassPane)
159 {
160 getRootPane().setGlassPane(glassPane);
161 }
162
163 protected void addImpl(Component comp, Object constraints, int index)
164 {
165 // If we're adding in the initialization stage use super.add.
166 // Otherwise pass the add onto the content pane.
167 if (isRootPaneCheckingEnabled())
168 getContentPane().add(comp, constraints, index);
169 else
170 super.addImpl(comp, constraints, index);
171 }
172
173 public AccessibleContext getAccessibleContext()
174 {
175 if (accessibleContext == null)
176 accessibleContext = new AccessibleJApplet();
177 return accessibleContext;
178 }
179
180 public JMenuBar getJMenuBar()
181 {
182 return getRootPane().getJMenuBar();
183 }
184
185 public void setJMenuBar(JMenuBar menubar)
186 {
187 getRootPane().setJMenuBar(menubar);
188 }
189
190 protected String paramString()
191 {
192 return super.paramString();
193 }
194
195 protected void processKeyEvent(KeyEvent e)
196 {
197 super.processKeyEvent(e);
198 }
199
200 public void remove(Component comp)
201 {
202 // If we're removing the root pane, use super.remove. Otherwise
203 // pass it on to the content pane instead
204 if (comp == rootPane)
205 super.remove(rootPane);
206 else
207 getContentPane().remove(comp);
208 }
209
210 protected boolean isRootPaneCheckingEnabled()
211 {
212 return rootPaneCheckingEnabled;
213 }
214
215 protected void setRootPaneCheckingEnabled(boolean enabled)
216 {
217 rootPaneCheckingEnabled = enabled;
218 }
219
220 public void update(Graphics g)
221 {
222 paint(g);
223 }
224 }