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

#ifndef __javax_swing_plaf_basic_BasicTextUI$Handler__
#define __javax_swing_plaf_basic_BasicTextUI$Handler__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace beans
    {
        class PropertyChangeEvent;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace event
      {
          class DocumentEvent;
      }
      namespace plaf
      {
        namespace basic
        {
            class BasicTextUI;
            class BasicTextUI$Handler;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicTextUI$Handler : public ::java::lang::Object
{

  BasicTextUI$Handler(::javax::swing::plaf::basic::BasicTextUI *);
public:
  virtual void propertyChange(::java::beans::PropertyChangeEvent *);
  virtual void changedUpdate(::javax::swing::event::DocumentEvent *);
  virtual void insertUpdate(::javax::swing::event::DocumentEvent *);
  virtual void removeUpdate(::javax::swing::event::DocumentEvent *);
public: // actually package-private
  BasicTextUI$Handler(::javax::swing::plaf::basic::BasicTextUI *, ::javax::swing::plaf::basic::BasicTextUI$Handler *);
  ::javax::swing::plaf::basic::BasicTextUI * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicTextUI$Handler__
