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

#ifndef __java_awt_Point__
#define __java_awt_Point__

#pragma interface

#include <java/awt/geom/Point2D.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Point;
    }
  }
}

class java::awt::Point : public ::java::awt::geom::Point2D
{

public:
  Point();
  Point(::java::awt::Point *);
  Point(jint, jint);
  virtual jdouble getX();
  virtual jdouble getY();
  virtual ::java::awt::Point * getLocation();
  virtual void setLocation(::java::awt::Point *);
  virtual void setLocation(jint, jint);
  virtual void setLocation(jdouble, jdouble);
  virtual void move(jint, jint);
  virtual void translate(jint, jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -5276940640259749850LL;
public:
  jint __attribute__((aligned(__alignof__( ::java::awt::geom::Point2D)))) x;
  jint y;
  static ::java::lang::Class class$;
};

#endif // __java_awt_Point__
