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

#ifndef __javax_swing_DefaultCellEditor__
#define __javax_swing_DefaultCellEditor__

#pragma interface

#include <javax/swing/AbstractCellEditor.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class DefaultCellEditor;
        class DefaultCellEditor$EditorDelegate;
        class JCheckBox;
        class JComboBox;
        class JComponent;
        class JTable;
        class JTextField;
        class JTree;
    }
  }
}

class javax::swing::DefaultCellEditor : public ::javax::swing::AbstractCellEditor
{

public:
  DefaultCellEditor(::javax::swing::JTextField *);
  DefaultCellEditor(::javax::swing::JCheckBox *);
  DefaultCellEditor(::javax::swing::JComboBox *);
  virtual ::java::awt::Component * getComponent();
  virtual jint getClickCountToStart();
  virtual void setClickCountToStart(jint);
  virtual ::java::lang::Object * getCellEditorValue();
  virtual jboolean isCellEditable(::java::util::EventObject *);
  virtual jboolean shouldSelectCell(::java::util::EventObject *);
  virtual jboolean stopCellEditing();
  virtual void cancelCellEditing();
  virtual ::java::awt::Component * getTreeCellEditorComponent(::javax::swing::JTree *, ::java::lang::Object *, jboolean, jboolean, jboolean, jint);
  virtual ::java::awt::Component * getTableCellEditorComponent(::javax::swing::JTable *, ::java::lang::Object *, jboolean, jint, jint);
private:
  static const jlong serialVersionUID = 3564035141373880027LL;
public: // actually protected
  ::javax::swing::JComponent * __attribute__((aligned(__alignof__( ::javax::swing::AbstractCellEditor)))) editorComponent;
  ::javax::swing::DefaultCellEditor$EditorDelegate * delegate;
  jint clickCountToStart;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_DefaultCellEditor__
