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

#ifndef __javax_swing_AbstractButton$EventHandler__
#define __javax_swing_AbstractButton$EventHandler__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class ActionEvent;
          class ItemEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class AbstractButton;
        class AbstractButton$EventHandler;
      namespace event
      {
          class ChangeEvent;
      }
    }
  }
}

class javax::swing::AbstractButton$EventHandler : public ::java::lang::Object
{

  AbstractButton$EventHandler(::javax::swing::AbstractButton *);
public:
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
  virtual void stateChanged(::javax::swing::event::ChangeEvent *);
  virtual void itemStateChanged(::java::awt::event::ItemEvent *);
public: // actually package-private
  AbstractButton$EventHandler(::javax::swing::AbstractButton *, ::javax::swing::AbstractButton$EventHandler *);
  ::javax::swing::AbstractButton * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_AbstractButton$EventHandler__
