# Class BorderWidths

java.lang.Object
javafx.scene.layout.BorderWidths

All Implemented Interfaces:
  `Interpolatable<BorderWidths>`

public final class BorderWidths extends Object implements Interpolatable<BorderWidths>
Defines widths for four components (top, right, bottom, and left). Each width is defined as a non-negative value. This value might be interpreted either as an literal value, or as a percentage of the width or height of the Region, depending on the values for `topAsPercentage`, `rightAsPercentage`, `bottomAsPercentage`, `leftAsPercentage`. The only allowable negative value for top, right, bottom, and left is `AUTO`.

Because the BorderWidths is immutable, it can safely be used in any cache, and can safely be reused among multiple Regions.

Since:
  JavaFX 8.0

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final double`
  `AUTO`
  When used by a BorderStroke, the value of AUTO is interpreted as the value of `BorderStroke.MEDIUM` for the corresponding side.
  `static final BorderWidths`
  `DEFAULT`
  The default BorderWidths that is used by a BorderImage when null is specified.
  `static final BorderWidths`
  `EMPTY`
  An empty set of widths, such that all values are 0 and are literal values.
  `static final BorderWidths`
  `FULL`
  A set of widths representing 100% on each side.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BorderWidths(double width)`
  Creates a new BorderWidths using the given width for all four borders, and treating this width as a literal value, and not a percentage.
  `BorderWidths(double top, double right, double bottom, double left)`
  Creates a new BorderWidths with the specified widths for top, right, bottom, and left.
  `BorderWidths(double top, double right, double bottom, double left, boolean topAsPercentage, boolean rightAsPercentage, boolean bottomAsPercentage, boolean leftAsPercentage)`
  Creates a new BorderWidths.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final double`
  `getBottom()`
  The non-negative value (with the exception of `AUTO`) indicating the border thickness on the bottom of the border.
  `final double`
  `getLeft()`
  The non-negative value (with the exception of `AUTO`) indicating the border thickness on the left of the border.
  `final double`
  `getRight()`
  The non-negative value (with the exception of `AUTO`) indicating the border thickness on the right of the border.
  `final double`
  `getTop()`
  A non-negative value (with the exception of `AUTO`) indicating the border thickness on the top of the border.
  `BorderWidths`
  `interpolate(BorderWidths endValue, double t)`
  Returns an intermediate value between the value of this `Interpolatable` and the specified `endValue` using the linear interpolation factor `t`.
  `final boolean`
  `isBottomAsPercentage()`
  Specifies whether the `bottom` property should be interpreted as a percentage (`true`) of the region height or not (`false`).
  `final boolean`
  `isLeftAsPercentage()`
  Specifies whether the `left` property should be interpreted as a percentage (`true`) of the region width or not (`false`).
  `final boolean`
  `isRightAsPercentage()`
  Specifies whether the `right` property should be interpreted as a percentage (`true`) of the region width or not (`false`).
  `final boolean`
  `isTopAsPercentage()`
  Specifies whether the `top` property should be interpreted as a percentage (`true`) of the region height or not (`false`).

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### AUTO

    public static final double AUTO
    When used by a BorderStroke, the value of AUTO is interpreted as the value of `BorderStroke.MEDIUM` for the corresponding side. When used with a BorderImage, the value of AUTO means to read the corresponding value from the BorderStroke(s), and not to specify it manually.
    See Also:
      - Constant Field Values

  - ### DEFAULT

    public static final BorderWidths DEFAULT
    The default BorderWidths that is used by a BorderImage when null is specified. This width is a single 1 pixel top, right, bottom, and left, all interpreted as literal values.

  - ### EMPTY

    public static final BorderWidths EMPTY
    An empty set of widths, such that all values are 0 and are literal values.

  - ### FULL

    public static final BorderWidths FULL
    A set of widths representing 100% on each side.

- ## Constructor Details

  - ### BorderWidths

    public BorderWidths(double width)
    Creates a new BorderWidths using the given width for all four borders, and treating this width as a literal value, and not a percentage.
    Parameters:
      `width` - The border width. This cannot be negative.

  - ### BorderWidths

    public BorderWidths(double top, double right, double bottom, double left)
    Creates a new BorderWidths with the specified widths for top, right, bottom, and left. None of these values may be negative. Each of these values is interpreted as a literal value, not as a percentage.
    Parameters:
      `top` - The thickness of the border on the top. Must be non-negative.
      `right` - The thickness of the border on the right. Must be non-negative.
      `bottom` - The thickness of the border on the bottom. Must be non-negative.
      `left` - The thickness of the border on the left. Must be non-negative.

  - ### BorderWidths

    public BorderWidths(double top, double right, double bottom, double left, boolean topAsPercentage, boolean rightAsPercentage, boolean bottomAsPercentage, boolean leftAsPercentage)
    Creates a new BorderWidths. None of the values for `top`, `right`, `bottom`, or `left` can be non-negative.
    Parameters:
      `top` - The thickness of the border on the top. Must be non-negative.
      `right` - The thickness of the border on the right. Must be non-negative.
      `bottom` - The thickness of the border on the bottom. Must be non-negative.
      `left` - The thickness of the border on the left. Must be non-negative.
      `topAsPercentage` - Whether the top should be treated as a percentage.
      `rightAsPercentage` - Whether the right should be treated as a percentage.
      `bottomAsPercentage` - Whether the bottom should be treated as a percentage.
      `leftAsPercentage` - Whether the left should be treated as a percentage.

- ## Method Details

  - ### getTop

    public final double getTop()
    A non-negative value (with the exception of `AUTO`) indicating the border thickness on the top of the border. This value can be a literal value, or can be treated as a percentage, based on the value of the `topAsPercentage` property.
    Interpolation Type:
      linear if both values are absolute or both values are `percentages`, and both values are not the special value `AUTO`; discrete otherwise
    Returns:
      the border thickness on the top of the border

  - ### getRight

    public final double getRight()
    The non-negative value (with the exception of `AUTO`) indicating the border thickness on the right of the border. This value can be a literal value, or can be treated as a percentage, based on the value of the `rightAsPercentage` property.
    Interpolation Type:
      linear if both values are absolute or both values are `percentages`, and both values are not the special value `AUTO`; discrete otherwise
    Returns:
      the border thickness on the right of the border

  - ### getBottom

    public final double getBottom()
    The non-negative value (with the exception of `AUTO`) indicating the border thickness on the bottom of the border. This value can be a literal value, or can be treated as a percentage, based on the value of the `bottomAsPercentage` property.
    Interpolation Type:
      linear if both values are absolute or both values are `percentages`, and both values are not the special value `AUTO`; discrete otherwise
    Returns:
      the border thickness on the bottom of the border

  - ### getLeft

    public final double getLeft()
    The non-negative value (with the exception of `AUTO`) indicating the border thickness on the left of the border. This value can be an literal value, or can be treated as a percentage, based on the value of the `leftAsPercentage` property.
    Interpolation Type:
      linear if both values are absolute or both values are `percentages`, and both values are not the special value `AUTO`; discrete otherwise
    Returns:
      the border thickness on the left of the border

  - ### isTopAsPercentage

    public final boolean isTopAsPercentage()
    Specifies whether the `top` property should be interpreted as a percentage (`true`) of the region height or not (`false`).
    Interpolation Type:
      discrete
    Returns:
      true if top should be interpreted as a percentage of the region height, otherwise false

  - ### isRightAsPercentage

    public final boolean isRightAsPercentage()
    Specifies whether the `right` property should be interpreted as a percentage (`true`) of the region width or not (`false`).
    Interpolation Type:
      discrete
    Returns:
      true if right should be interpreted as a percentage of the region width, otherwise false

  - ### isBottomAsPercentage

    public final boolean isBottomAsPercentage()
    Specifies whether the `bottom` property should be interpreted as a percentage (`true`) of the region height or not (`false`).
    Interpolation Type:
      discrete
    Returns:
      true if bottom should be interpreted as a percentage of the region height, otherwise false

  - ### isLeftAsPercentage

    public final boolean isLeftAsPercentage()
    Specifies whether the `left` property should be interpreted as a percentage (`true`) of the region width or not (`false`).
    Interpolation Type:
      discrete
    Returns:
      true if left should be interpreted as a percentage of the region width, otherwise false

  - ### interpolate

    public BorderWidths interpolate(BorderWidths endValue, double t)
    Returns an intermediate value between the value of this `Interpolatable` and the specified `endValue` using the linear interpolation factor `t`. The interpolation factor can be any finite value.

    The returned value might not be a new instance; the implementation might also return one of the two existing instances if the intermediate value would be equal to one of the existing values. However, this is an optimization and applications should not assume any particular identity of the returned value.

    Specified by:
      `interpolate` in interface `Interpolatable<BorderWidths>`
    Parameters:
      `endValue` - the target value
      `t` - the interpolation factor
    Returns:
      the intermediate value
    Throws:
      `NullPointerException` - if `endValue` is `null`
    Since:
      24