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

#ifndef __javax_swing_event_ListDataEvent__
#define __javax_swing_event_ListDataEvent__

#pragma interface

#include <java/util/EventObject.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace event
      {
          class ListDataEvent;
      }
    }
  }
}

class javax::swing::event::ListDataEvent : public ::java::util::EventObject
{

public:
  ListDataEvent(::java::lang::Object *, jint, jint, jint);
  virtual jint getIndex0();
  virtual jint getIndex1();
  virtual jint getType();
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = 2510353260071004774LL;
public:
  static const jint CONTENTS_CHANGED = 0;
  static const jint INTERVAL_ADDED = 1;
  static const jint INTERVAL_REMOVED = 2;
private:
  jint __attribute__((aligned(__alignof__( ::java::util::EventObject)))) type;
  jint index0;
  jint index1;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_event_ListDataEvent__
