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

#ifndef __javax_swing_SpringLayout$DeferredSpring__
#define __javax_swing_SpringLayout$DeferredSpring__

#pragma interface

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

class javax::swing::SpringLayout$DeferredSpring : public ::javax::swing::Spring
{

public:
  virtual ::java::lang::String * toString();
  SpringLayout$DeferredSpring(::javax::swing::SpringLayout *, ::java::lang::String *, ::java::awt::Component *);
private:
  ::javax::swing::Spring * resolveSpring();
public:
  virtual jint getMaximumValue();
  virtual jint getMinimumValue();
  virtual jint getPreferredValue();
  virtual jint getValue();
  virtual void setValue(jint);
private:
  ::javax::swing::SpringLayout * __attribute__((aligned(__alignof__( ::javax::swing::Spring)))) sl;
  ::java::lang::String * edgeName;
  ::java::awt::Component * c;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_SpringLayout$DeferredSpring__
