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