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

#ifndef __javax_swing_Spring__
#define __javax_swing_Spring__

#pragma interface

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

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

public: // actually protected
  Spring();
public:
  static ::javax::swing::Spring * constant(jint);
  static ::javax::swing::Spring * constant(jint, jint, jint);
  virtual jint getMaximumValue() = 0;
  virtual jint getMinimumValue() = 0;
  virtual jint getPreferredValue() = 0;
  virtual jint getValue() = 0;
  static ::javax::swing::Spring * max(::javax::swing::Spring *, ::javax::swing::Spring *);
  static ::javax::swing::Spring * minus(::javax::swing::Spring *);
  virtual void setValue(jint) = 0;
private:
  jint getShrinkRange();
  jint getExpandRange();
public: // actually package-private
  virtual jdouble getStrain();
  virtual void setStrain(jdouble);
public:
  static ::javax::swing::Spring * sum(::javax::swing::Spring *, ::javax::swing::Spring *);
  static ::javax::swing::Spring * scale(::javax::swing::Spring *, jfloat);
  static ::javax::swing::Spring * width(::java::awt::Component *);
  static ::javax::swing::Spring * height(::java::awt::Component *);
  static const jint UNSET = -2147483647 - 1;
  static ::java::lang::Class class$;
};

#endif // __javax_swing_Spring__
