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

#ifndef __java_awt_TextField__
#define __java_awt_TextField__

#pragma interface

#include <java/awt/TextComponent.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class AWTEvent;
        class Dimension;
        class TextField;
      namespace event
      {
          class ActionEvent;
          class ActionListener;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleContext;
    }
  }
}

class java::awt::TextField : public ::java::awt::TextComponent
{

public:
  TextField();
  TextField(::java::lang::String *);
  TextField(jint);
  TextField(::java::lang::String *, jint);
  virtual jint getColumns();
  virtual void setColumns(jint);
  virtual jchar getEchoChar();
  virtual void setEchoChar(jchar);
  virtual void setEchoCharacter(jchar);
  virtual jboolean echoCharIsSet();
  virtual ::java::awt::Dimension * getMinimumSize();
  virtual ::java::awt::Dimension * getMinimumSize(jint);
  virtual ::java::awt::Dimension * minimumSize();
  virtual ::java::awt::Dimension * minimumSize(jint);
  virtual ::java::awt::Dimension * getPreferredSize();
  virtual ::java::awt::Dimension * getPreferredSize(jint);
  virtual ::java::awt::Dimension * preferredSize();
  virtual ::java::awt::Dimension * preferredSize(jint);
  virtual void addNotify();
  virtual void addActionListener(::java::awt::event::ActionListener *);
  virtual void removeActionListener(::java::awt::event::ActionListener *);
public: // actually protected
  virtual void processEvent(::java::awt::AWTEvent *);
  virtual void processActionEvent(::java::awt::event::ActionEvent *);
public: // actually package-private
  virtual void dispatchEventImpl(::java::awt::AWTEvent *);
public: // actually protected
  virtual ::java::lang::String * paramString();
public:
  virtual JArray< ::java::util::EventListener * > * getListeners(::java::lang::Class *);
  virtual JArray< ::java::awt::event::ActionListener * > * getActionListeners();
public: // actually package-private
  virtual ::java::lang::String * generateName();
private:
  static jlong getUniqueLong();
public:
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
private:
  static jlong next_textfield_number;
  static const jlong serialVersionUID = -2966288784432217853LL;
  jint __attribute__((aligned(__alignof__( ::java::awt::TextComponent)))) columns;
  jchar echoChar;
  ::java::awt::event::ActionListener * action_listeners;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_TextField__
