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

#ifndef __javax_swing_JToggleButton$AccessibleJToggleButton__
#define __javax_swing_JToggleButton$AccessibleJToggleButton__

#pragma interface

#include <javax/swing/AbstractButton$AccessibleAbstractButton.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class ItemEvent;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleRole;
    }
    namespace swing
    {
        class JToggleButton;
        class JToggleButton$AccessibleJToggleButton;
    }
  }
}

class javax::swing::JToggleButton$AccessibleJToggleButton : public ::javax::swing::AbstractButton$AccessibleAbstractButton
{

public:
  JToggleButton$AccessibleJToggleButton(::javax::swing::JToggleButton *);
  virtual ::javax::accessibility::AccessibleRole * getAccessibleRole();
  virtual void itemStateChanged(::java::awt::event::ItemEvent *);
private:
  static const jlong serialVersionUID = -8652952712161229225LL;
public: // actually package-private
  ::javax::swing::JToggleButton * __attribute__((aligned(__alignof__( ::javax::swing::AbstractButton$AccessibleAbstractButton)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JToggleButton$AccessibleJToggleButton__
