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

#ifndef __gnu_java_awt_peer_swing_SwingTextFieldPeer__
#define __gnu_java_awt_peer_swing_SwingTextFieldPeer__

#pragma interface

#include <gnu/java/awt/peer/swing/SwingComponentPeer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace swing
          {
              class SwingTextFieldPeer;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Dimension;
        class Rectangle;
        class TextField;
      namespace im
      {
          class InputMethodRequests;
      }
    }
  }
}

class gnu::java::awt::peer::swing::SwingTextFieldPeer : public ::gnu::java::awt::peer::swing::SwingComponentPeer
{

public:
  SwingTextFieldPeer(::java::awt::TextField *);
  virtual ::java::awt::Dimension * minimumSize(jint);
  virtual ::java::awt::Dimension * preferredSize(jint);
  virtual ::java::awt::Dimension * getMinimumSize(jint);
  virtual ::java::awt::Dimension * getPreferredSize(jint);
  virtual void setEchoChar(jchar);
  virtual void setEchoCharacter(jchar);
  virtual jint getSelectionEnd();
  virtual jint getSelectionStart();
  virtual ::java::lang::String * getText();
  virtual void setText(::java::lang::String *);
  virtual void select(jint, jint);
  virtual void setEditable(jboolean);
  virtual jint getCaretPosition();
  virtual void setCaretPosition(jint);
  virtual jint getIndexAtPoint(jint, jint);
  virtual ::java::awt::Rectangle * getCharacterBounds(jint);
  virtual jlong filterEvents(jlong);
  virtual ::java::awt::im::InputMethodRequests * getInputMethodRequests();
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_swing_SwingTextFieldPeer__
