
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_swing_JApplet__
#define __javax_swing_JApplet__

#pragma interface

#include <java/applet/Applet.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
        class Dimension;
        class Graphics;
        class LayoutManager;
      namespace event
      {
          class KeyEvent;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleContext;
    }
    namespace swing
    {
        class JApplet;
        class JLayeredPane;
        class JMenuBar;
        class JRootPane;
    }
  }
}

class javax::swing::JApplet : public ::java::applet::Applet
{

public:
  JApplet();
  virtual ::java::awt::Dimension * getPreferredSize();
  virtual void setLayout(::java::awt::LayoutManager *);
  virtual void setLayeredPane(::javax::swing::JLayeredPane *);
  virtual ::javax::swing::JLayeredPane * getLayeredPane();
  virtual ::javax::swing::JRootPane * getRootPane();
public: // actually protected
  virtual void setRootPane(::javax::swing::JRootPane *);
  virtual ::javax::swing::JRootPane * createRootPane();
public:
  virtual ::java::awt::Container * getContentPane();
  virtual void setContentPane(::java::awt::Container *);
  virtual ::java::awt::Component * getGlassPane();
  virtual void setGlassPane(::java::awt::Component *);
public: // actually protected
  virtual void addImpl(::java::awt::Component *, ::java::lang::Object *, jint);
public:
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
  virtual ::javax::swing::JMenuBar * getJMenuBar();
  virtual void setJMenuBar(::javax::swing::JMenuBar *);
public: // actually protected
  virtual ::java::lang::String * paramString();
  virtual void processKeyEvent(::java::awt::event::KeyEvent *);
public:
  virtual void remove(::java::awt::Component *);
public: // actually protected
  virtual jboolean isRootPaneCheckingEnabled();
  virtual void setRootPaneCheckingEnabled(jboolean);
public:
  virtual void update(::java::awt::Graphics *);
public: // actually protected
  ::javax::accessibility::AccessibleContext * __attribute__((aligned(__alignof__( ::java::applet::Applet)))) accessibleContext;
private:
  static const jlong serialVersionUID = 7269359214497372587LL;
public: // actually protected
  ::javax::swing::JRootPane * rootPane;
  jboolean rootPaneCheckingEnabled;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JApplet__
