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

#ifndef __gnu_java_awt_peer_swing_SwingComponent__
#define __gnu_java_awt_peer_swing_SwingComponent__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace swing
          {
              class SwingComponent;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class FocusEvent;
          class KeyEvent;
          class MouseEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JComponent;
    }
  }
}

class gnu::java::awt::peer::swing::SwingComponent : public ::java::lang::Object
{

public:
  virtual ::javax::swing::JComponent * getJComponent() = 0;
  virtual void handleMouseEvent(::java::awt::event::MouseEvent *) = 0;
  virtual void handleMouseMotionEvent(::java::awt::event::MouseEvent *) = 0;
  virtual void handleKeyEvent(::java::awt::event::KeyEvent *) = 0;
  virtual void handleFocusEvent(::java::awt::event::FocusEvent *) = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __gnu_java_awt_peer_swing_SwingComponent__
