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

#ifndef __javax_swing_SpringLayout__
#define __javax_swing_SpringLayout__

#pragma interface

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

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

public:
  SpringLayout();
  virtual void addLayoutComponent(::java::awt::Component *, ::java::lang::Object *);
  virtual void addLayoutComponent(::java::lang::String *, ::java::awt::Component *);
  virtual ::javax::swing::Spring * getConstraint(::java::lang::String *, ::java::awt::Component *);
  virtual ::javax::swing::SpringLayout$Constraints * getConstraints(::java::awt::Component *);
  virtual jfloat getLayoutAlignmentX(::java::awt::Container *);
  virtual jfloat getLayoutAlignmentY(::java::awt::Container *);
  virtual void invalidateLayout(::java::awt::Container *);
private:
  ::javax::swing::SpringLayout$Constraints * initContainer(::java::awt::Container *);
public:
  virtual void layoutContainer(::java::awt::Container *);
  virtual ::java::awt::Dimension * maximumLayoutSize(::java::awt::Container *);
  virtual ::java::awt::Dimension * minimumLayoutSize(::java::awt::Container *);
  virtual ::java::awt::Dimension * preferredLayoutSize(::java::awt::Container *);
  virtual void putConstraint(::java::lang::String *, ::java::awt::Component *, jint, ::java::lang::String *, ::java::awt::Component *);
  virtual void putConstraint(::java::lang::String *, ::java::awt::Component *, ::javax::swing::Spring *, ::java::lang::String *, ::java::awt::Component *);
  virtual void removeLayoutComponent(::java::awt::Component *);
  static ::java::lang::String * EAST;
  static ::java::lang::String * NORTH;
  static ::java::lang::String * SOUTH;
  static ::java::lang::String * WEST;
private:
  ::java::util::Map * __attribute__((aligned(__alignof__( ::java::lang::Object)))) constraintsMap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_SpringLayout__
