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

#ifndef __javax_swing_JCheckBox__
#define __javax_swing_JCheckBox__

#pragma interface

#include <javax/swing/JToggleButton.h>
extern "Java"
{
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleContext;
    }
    namespace swing
    {
        class Action;
        class Icon;
        class JCheckBox;
    }
  }
}

class javax::swing::JCheckBox : public ::javax::swing::JToggleButton
{

  void init();
public:
  JCheckBox();
  JCheckBox(::javax::swing::Action *);
  JCheckBox(::javax::swing::Icon *);
  JCheckBox(::javax::swing::Icon *, jboolean);
  JCheckBox(::java::lang::String *);
  JCheckBox(::java::lang::String *, jboolean);
  JCheckBox(::java::lang::String *, ::javax::swing::Icon *);
  JCheckBox(::java::lang::String *, ::javax::swing::Icon *, jboolean);
  virtual ::java::lang::String * getUIClassID();
public: // actually protected
  virtual ::java::lang::String * paramString();
public:
  virtual jboolean isBorderPaintedFlat();
  virtual void setBorderPaintedFlat(jboolean);
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
private:
  static const jlong serialVersionUID = -5246739313864538930LL;
public:
  static ::java::lang::String * BORDER_PAINTED_FLAT_CHANGED_PROPERTY;
private:
  jboolean __attribute__((aligned(__alignof__( ::javax::swing::JToggleButton)))) borderPaintedFlat;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JCheckBox__
