1 /* JApplet.java --
2    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
3 
4 This file is part of GNU Classpath.
5 
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10 
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20 
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25 
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37 
38 
39 package javax.swing;
40 
41 import java.applet.Applet;
42 import java.awt.BorderLayout;
43 import java.awt.Component;
44 import java.awt.Container;
45 import java.awt.Dimension;
46 import java.awt.Graphics;
47 import java.awt.LayoutManager;
48 import java.awt.event.KeyEvent;
49 
50 import javax.accessibility.Accessible;
51 import javax.accessibility.AccessibleContext;
52 
53 /**
54  * A top-level container that is usually used in web browsers.
55  *
56  * @author original author unknown
57  */
58 public class JApplet extends Applet
59   implements RootPaneContainer, Accessible
60 {
61   /**
62    * Provides accessibility support for <code>JApplet</code>.
63    */
64   protected class AccessibleJApplet extends Applet.AccessibleApplet
65   {
66     /**
67      * Creates a new instance of <code>AccessibleJApplet</code>.
68      */
AccessibleJApplet()69     protected AccessibleJApplet()
70     {
71       super();
72       // Nothing to do here.
73     }
74   }
75 
76   /**
77    * The accessible context for this <code>JApplet</code>.
78    */
79   protected AccessibleContext accessibleContext;
80 
81   private static final long serialVersionUID = 7269359214497372587L;
82 
83   protected JRootPane rootPane;
84 
85   /**
86    * @specnote rootPaneCheckingEnabled is false to comply with J2SE 5.0
87    */
88   protected boolean rootPaneCheckingEnabled = false;
89 
JApplet()90   public JApplet()
91   {
92     super.setLayout(new BorderLayout(1, 1));
93     getRootPane(); // Will do set/create.
94     setRootPaneCheckingEnabled(true); // Init stage is now over.
95   }
96 
getPreferredSize()97   public Dimension getPreferredSize()
98   {
99     return super.getPreferredSize();
100   }
101 
setLayout(LayoutManager manager)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 
setLayeredPane(JLayeredPane layeredPane)112   public void setLayeredPane(JLayeredPane layeredPane)
113   {
114     getRootPane().setLayeredPane(layeredPane);
115   }
116 
getLayeredPane()117   public JLayeredPane getLayeredPane()
118   {
119     return getRootPane().getLayeredPane();
120   }
121 
getRootPane()122   public JRootPane getRootPane()
123   {
124     if (rootPane == null)
125       setRootPane(createRootPane());
126     return rootPane;
127   }
128 
setRootPane(JRootPane root)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 
createRootPane()138   protected JRootPane createRootPane()
139   {
140     return new JRootPane();
141   }
142 
getContentPane()143   public Container getContentPane()
144   {
145     return getRootPane().getContentPane();
146   }
147 
setContentPane(Container contentPane)148   public void setContentPane(Container contentPane)
149   {
150     getRootPane().setContentPane(contentPane);
151   }
152 
getGlassPane()153   public Component getGlassPane()
154   {
155     return getRootPane().getGlassPane();
156   }
157 
setGlassPane(Component glassPane)158   public void setGlassPane(Component glassPane)
159   {
160     getRootPane().setGlassPane(glassPane);
161   }
162 
addImpl(Component comp, Object constraints, int index)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 
getAccessibleContext()173   public AccessibleContext getAccessibleContext()
174   {
175     if (accessibleContext == null)
176       accessibleContext = new AccessibleJApplet();
177     return accessibleContext;
178   }
179 
getJMenuBar()180   public JMenuBar getJMenuBar()
181   {
182     return getRootPane().getJMenuBar();
183   }
184 
setJMenuBar(JMenuBar menubar)185   public void setJMenuBar(JMenuBar menubar)
186   {
187     getRootPane().setJMenuBar(menubar);
188   }
189 
paramString()190   protected String paramString()
191   {
192     return super.paramString();
193   }
194 
processKeyEvent(KeyEvent e)195   protected void processKeyEvent(KeyEvent e)
196   {
197     super.processKeyEvent(e);
198   }
199 
remove(Component comp)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 
isRootPaneCheckingEnabled()210   protected boolean isRootPaneCheckingEnabled()
211   {
212     return rootPaneCheckingEnabled;
213   }
214 
setRootPaneCheckingEnabled(boolean enabled)215   protected void setRootPaneCheckingEnabled(boolean enabled)
216   {
217     rootPaneCheckingEnabled = enabled;
218   }
219 
update(Graphics g)220   public void update(Graphics g)
221   {
222     paint(g);
223   }
224 }
225