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

#ifndef __javax_swing_SpringLayout$Constraints__
#define __javax_swing_SpringLayout$Constraints__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Spring;
        class SpringLayout$Constraints;
    }
  }
}

class javax::swing::SpringLayout$Constraints : public ::java::lang::Object
{

public:
  SpringLayout$Constraints();
  SpringLayout$Constraints(::javax::swing::Spring *, ::javax::swing::Spring *);
  SpringLayout$Constraints(::javax::swing::Spring *, ::javax::swing::Spring *, ::javax::swing::Spring *, ::javax::swing::Spring *);
  SpringLayout$Constraints(::java::awt::Component *);
  virtual ::javax::swing::Spring * getConstraint(::java::lang::String *);
  virtual ::javax::swing::Spring * getHeight();
  virtual ::javax::swing::Spring * getWidth();
  virtual ::javax::swing::Spring * getX();
  virtual ::javax::swing::Spring * getY();
  virtual ::javax::swing::Spring * getSouth();
  virtual ::javax::swing::Spring * getEast();
  virtual void setConstraint(::java::lang::String *, ::javax::swing::Spring *);
  virtual void setHeight(::javax::swing::Spring *);
  virtual void setWidth(::javax::swing::Spring *);
  virtual void setX(::javax::swing::Spring *);
  virtual void setY(::javax::swing::Spring *);
  virtual void setSouth(::javax::swing::Spring *);
  virtual void setEast(::javax::swing::Spring *);
  virtual void dropCalcResult();
private:
  ::javax::swing::Spring * __attribute__((aligned(__alignof__( ::java::lang::Object)))) x;
  ::javax::swing::Spring * y;
  ::javax::swing::Spring * height;
  ::javax::swing::Spring * width;
  ::javax::swing::Spring * east;
  ::javax::swing::Spring * south;
  ::javax::swing::Spring * v;
  ::javax::swing::Spring * h;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_SpringLayout$Constraints__
