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

#ifndef __java_awt_event_FocusEvent__
#define __java_awt_event_FocusEvent__

#pragma interface

#include <java/awt/event/ComponentEvent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
      namespace event
      {
          class FocusEvent;
      }
    }
  }
}

class java::awt::event::FocusEvent : public ::java::awt::event::ComponentEvent
{

public:
  FocusEvent(::java::awt::Component *, jint, jboolean, ::java::awt::Component *);
  FocusEvent(::java::awt::Component *, jint, jboolean);
  FocusEvent(::java::awt::Component *, jint);
  virtual jboolean isTemporary();
  virtual ::java::awt::Component * getOppositeComponent();
  virtual ::java::lang::String * paramString();
private:
  static const jlong serialVersionUID = 523753786457416396LL;
public:
  static const jint FOCUS_FIRST = 1004;
  static const jint FOCUS_LAST = 1005;
  static const jint FOCUS_GAINED = 1004;
  static const jint FOCUS_LOST = 1005;
private:
  jboolean __attribute__((aligned(__alignof__( ::java::awt::event::ComponentEvent)))) temporary;
  ::java::awt::Component * opposite;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_event_FocusEvent__
