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

#ifndef __javax_swing_text_DefaultFormatterFactory__
#define __javax_swing_text_DefaultFormatterFactory__

#pragma interface

#include <javax/swing/JFormattedTextField$AbstractFormatterFactory.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class JFormattedTextField;
        class JFormattedTextField$AbstractFormatter;
      namespace text
      {
          class DefaultFormatterFactory;
      }
    }
  }
}

class javax::swing::text::DefaultFormatterFactory : public ::javax::swing::JFormattedTextField$AbstractFormatterFactory
{

public:
  DefaultFormatterFactory();
  DefaultFormatterFactory(::javax::swing::JFormattedTextField$AbstractFormatter *);
  DefaultFormatterFactory(::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *);
  DefaultFormatterFactory(::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *);
  DefaultFormatterFactory(::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *, ::javax::swing::JFormattedTextField$AbstractFormatter *);
  virtual ::javax::swing::JFormattedTextField$AbstractFormatter * getDefaultFormatter();
  virtual void setDefaultFormatter(::javax::swing::JFormattedTextField$AbstractFormatter *);
  virtual ::javax::swing::JFormattedTextField$AbstractFormatter * getDisplayFormatter();
  virtual void setDisplayFormatter(::javax::swing::JFormattedTextField$AbstractFormatter *);
  virtual ::javax::swing::JFormattedTextField$AbstractFormatter * getEditFormatter();
  virtual void setEditFormatter(::javax::swing::JFormattedTextField$AbstractFormatter *);
  virtual ::javax::swing::JFormattedTextField$AbstractFormatter * getNullFormatter();
  virtual void setNullFormatter(::javax::swing::JFormattedTextField$AbstractFormatter *);
  virtual ::javax::swing::JFormattedTextField$AbstractFormatter * getFormatter(::javax::swing::JFormattedTextField *);
public: // actually package-private
  ::javax::swing::JFormattedTextField$AbstractFormatter * __attribute__((aligned(__alignof__( ::javax::swing::JFormattedTextField$AbstractFormatterFactory)))) defaultFormatter;
  ::javax::swing::JFormattedTextField$AbstractFormatter * editFormatter;
  ::javax::swing::JFormattedTextField$AbstractFormatter * displayFormatter;
  ::javax::swing::JFormattedTextField$AbstractFormatter * nullFormatter;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_DefaultFormatterFactory__
