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

#ifndef __javax_swing_AbstractCellEditor__
#define __javax_swing_AbstractCellEditor__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class AbstractCellEditor;
      namespace event
      {
          class CellEditorListener;
          class ChangeEvent;
          class EventListenerList;
      }
    }
  }
}

class javax::swing::AbstractCellEditor : public ::java::lang::Object
{

public:
  AbstractCellEditor();
  virtual jboolean isCellEditable(::java::util::EventObject *);
  virtual jboolean shouldSelectCell(::java::util::EventObject *);
  virtual jboolean stopCellEditing();
  virtual void cancelCellEditing();
  virtual void addCellEditorListener(::javax::swing::event::CellEditorListener *);
  virtual void removeCellEditorListener(::javax::swing::event::CellEditorListener *);
  virtual JArray< ::javax::swing::event::CellEditorListener * > * getCellEditorListeners();
public: // actually protected
  virtual void fireEditingStopped();
  virtual void fireEditingCanceled();
public:
  virtual ::java::lang::Object * getCellEditorValue() = 0;
private:
  static const jlong serialVersionUID = -1048006551406220959LL;
public: // actually protected
  ::javax::swing::event::EventListenerList * __attribute__((aligned(__alignof__( ::java::lang::Object)))) listenerList;
  ::javax::swing::event::ChangeEvent * changeEvent;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_AbstractCellEditor__
