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

#ifndef __javax_swing_JSpinner__
#define __javax_swing_JSpinner__

#pragma interface

#include <javax/swing/JComponent.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class JComponent;
        class JSpinner;
        class SpinnerModel;
      namespace event
      {
          class ChangeListener;
      }
      namespace plaf
      {
          class SpinnerUI;
      }
    }
  }
}

class javax::swing::JSpinner : public ::javax::swing::JComponent
{

public:
  JSpinner();
  JSpinner(::javax::swing::SpinnerModel *);
  virtual void commitEdit();
  virtual ::javax::swing::JComponent * getEditor();
  virtual void setEditor(::javax::swing::JComponent *);
  virtual ::javax::swing::SpinnerModel * getModel();
  virtual void setModel(::javax::swing::SpinnerModel *);
  virtual ::java::lang::Object * getNextValue();
  virtual ::java::lang::Object * getPreviousValue();
  virtual ::javax::swing::plaf::SpinnerUI * getUI();
  virtual ::java::lang::Object * getValue();
  virtual void setValue(::java::lang::Object *);
  virtual ::java::lang::String * getUIClassID();
  virtual void updateUI();
  virtual void setUI(::javax::swing::plaf::SpinnerUI *);
  virtual void addChangeListener(::javax::swing::event::ChangeListener *);
  virtual void removeChangeListener(::javax::swing::event::ChangeListener *);
  virtual JArray< ::javax::swing::event::ChangeListener * > * getChangeListeners();
public: // actually protected
  virtual void fireStateChanged();
  virtual ::javax::swing::JComponent * createEditor(::javax::swing::SpinnerModel *);
private:
  ::javax::swing::SpinnerModel * __attribute__((aligned(__alignof__( ::javax::swing::JComponent)))) model;
  ::javax::swing::JComponent * editor;
  static const jlong serialVersionUID = 3412663575706551720LL;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JSpinner__
