Class Rectangle

java.lang.Object
java.awt.geom.RectangularShape
java.awt.geom.Rectangle2D
java.awt.Rectangle
All Implemented Interfaces:
Shape,Serializable,Cloneable
Direct Known Subclasses:
DefaultCaret

public classRectangleextendsRectangle2DimplementsShape,Serializable
ARectangle specifies an area in a coordinate space that is enclosed by theRectangle object's upper-left point(x,y) in the coordinate space, its width, and its height.

ARectangle object'swidth andheight arepublic fields. The constructors that create aRectangle, and the methods that can modify one, do not prevent setting a negative value for width or height.

ARectangle whose width or height is exactly zero has location along those axes with zero dimension, but is otherwise considered empty. TheisEmpty() method will return true for such aRectangle. Methods which test if an emptyRectangle contains or intersects a point or rectangle will always return false if either dimension is zero. Methods which combine such aRectangle with a point or rectangle will include the location of theRectangle on that axis in the result as if theadd(Point) method were being called.

ARectangle whose width or height is negative has neither location nor dimension along those axes with negative dimensions. Such aRectangle is treated as non-existent along those axes. Such aRectangle is also empty with respect to containment calculations and methods which test if it contains or intersects a point or rectangle will always return false. Methods which combine such aRectangle with a point or rectangle will ignore theRectangle entirely in generating the result. If twoRectangle objects are combined and each has a negative dimension, the result will have at least one negative dimension.

Methods which affect only the location of aRectangle will operate on its location regardless of whether or not it has a negative or zero dimension along either axis.

Note that aRectangle constructed with the default no-argument constructor will have dimensions of0x0 and therefore be empty. ThatRectangle will still have a location of(0,0) and will contribute that location to the union and add operations. Code attempting to accumulate the bounds of a set of points should therefore initially construct theRectangle with a specifically negative width and height or it should use the first point in the set to construct theRectangle. For example:

     Rectangle bounds = new Rectangle(0, 0, -1, -1);     for (int i = 0; i < points.length; i++) {         bounds.add(points[i]);     }
or if we know that the points array contains at least one point:
     Rectangle bounds = new Rectangle(points[0]);     for (int i = 1; i < points.length; i++) {         bounds.add(points[i]);     }

This class uses 32-bit integers to store its location and dimensions. Frequently operations may produce a result that exceeds the range of a 32-bit integer. The methods will calculate their results in a way that avoids any 32-bit overflow for intermediate results and then choose the best representation to store the final results back into the 32-bit fields which hold the location and dimensions. The location of the result will be stored into thex andy fields by clipping the true result to the nearest 32-bit value. The values stored into thewidth andheight dimension fields will be chosen as the 32-bit values that encompass the largest part of the true result as possible. Generally this means that the dimension will be clipped independently to the range of 32-bit integers except that if the location had to be moved to store it into its pair of 32-bit fields then the dimensions will be adjusted relative to the "best representation" of the location. If the true result had a negative dimension and was therefore non-existent along one or both axes, the stored dimensions will be negative numbers in those axes. If the true result had a location that could be represented within the range of 32-bit integers, but zero dimension along one or both axes, then the stored dimensions will be zero in those axes.

Since:
1.0
See Also:
  • Nested Class Summary

    Nested classes/interfaces declared in class java.awt.geom.Rectangle2D

    Rectangle2D.Double,Rectangle2D.Float
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    int
    The height of theRectangle.
    int
    The width of theRectangle.
    int
    The X coordinate of the upper-left corner of theRectangle.
    int
    The Y coordinate of the upper-left corner of theRectangle.

    Fields declared in class java.awt.geom.Rectangle2D

    OUT_BOTTOM,OUT_LEFT,OUT_RIGHT,OUT_TOP
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructs a newRectangle whose upper-left corner is at (0, 0) in the coordinate space, and whose width and height are both zero.
    Rectangle(int width, int height)
    Constructs a newRectangle whose upper-left corner is at (0, 0) in the coordinate space, and whose width and height are specified by the arguments of the same name.
    Rectangle(int x, int y, int width, int height)
    Constructs a newRectangle whose upper-left corner is specified as(x,y) and whose width and height are specified by the arguments of the same name.
    Constructs a newRectangle whose top left corner is (0, 0) and whose width and height are specified by theDimension argument.
    Constructs a newRectangle whose upper-left corner is the specifiedPoint, and whose width and height are both zero.
    Constructs a newRectangle whose upper-left corner is specified by thePoint argument, and whose width and height are specified by theDimension argument.
    Constructs a newRectangle, initialized to match the values of the specifiedRectangle.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(int newx, int newy)
    Adds a point, specified by the integer argumentsnewx,newy to the bounds of thisRectangle.
    void
    add(Point pt)
    Adds the specifiedPoint to the bounds of thisRectangle.
    void
    Adds aRectangle to thisRectangle.
    boolean
    contains(int x, int y)
    Checks whether or not thisRectangle contains the point at the specified location(x,y).
    boolean
    contains(int X, int Y, int W, int H)
    Checks whether thisRectangle entirely contains theRectangle at the specified location(X,Y) with the specified dimensions(W,H).
    boolean
    Checks whether or not thisRectangle contains the specifiedPoint.
    boolean
    Checks whether or not thisRectangle entirely contains the specifiedRectangle.
    Returns a newRectangle2D object representing the intersection of thisRectangle2D with the specifiedRectangle2D.
    Returns a newRectangle2D object representing the union of thisRectangle2D with the specifiedRectangle2D.
    boolean
    Checks whether two rectangles are equal.
    Gets the boundingRectangle of thisRectangle.
    Returns a high precision and more accurate bounding box of theShape than thegetBounds method.
    double
    Returns the height of the boundingRectangle indouble precision.
    Returns the location of thisRectangle.
    Gets the size of thisRectangle, represented by the returnedDimension.
    double
    Returns the width of the boundingRectangle indouble precision.
    double
    Returns the X coordinate of the boundingRectangle indouble precision.
    double
    Returns the Y coordinate of the boundingRectangle indouble precision.
    void
    grow(int h, int v)
    Resizes theRectangle both horizontally and vertically.
    boolean
    inside(int X, int Y)
    Deprecated.
    As of JDK version 1.1, replaced bycontains(int, int).
    Computes the intersection of thisRectangle with the specifiedRectangle.
    boolean
    Determines whether or not thisRectangle and the specifiedRectangle intersect.
    boolean
    Determines whether theRectangularShape is empty.
    void
    move(int x, int y)
    Deprecated.
    As of JDK version 1.1, replaced bysetLocation(int, int).
    int
    outcode(double x, double y)
    Determines where the specified coordinates lie with respect to thisRectangle2D.
    void
    reshape(int x, int y, int width, int height)
    Deprecated.
    As of JDK version 1.1, replaced bysetBounds(int, int, int, int).
    void
    resize(int width, int height)
    Deprecated.
    As of JDK version 1.1, replaced bysetSize(int, int).
    void
    setBounds(int x, int y, int width, int height)
    Sets the boundingRectangle of thisRectangle to the specifiedx,y,width, andheight.
    void
    Sets the boundingRectangle of thisRectangle to match the specifiedRectangle.
    void
    setLocation(int x, int y)
    Moves thisRectangle to the specified location.
    void
    Moves thisRectangle to the specified location.
    void
    setRect(double x, double y, double width, double height)
    Sets the bounds of thisRectangle to the integer bounds which encompass the specifiedx,y,width, andheight.
    void
    setSize(int width, int height)
    Sets the size of thisRectangle to the specified width and height.
    void
    Sets the size of thisRectangle to match the specifiedDimension.
    Returns aString representing thisRectangle and its values.
    void
    translate(int dx, int dy)
    Translates thisRectangle the indicated distance, to the right along the X coordinate axis, and downward along the Y coordinate axis.
    Computes the union of thisRectangle with the specifiedRectangle.

    Methods declared in class java.lang.Object

    finalize,getClass,notify,notifyAll,wait,wait,wait
  • Field Details

  • Constructor Details

    • Rectangle

      public Rectangle()
      Constructs a newRectangle whose upper-left corner is at (0, 0) in the coordinate space, and whose width and height are both zero.
    • Rectangle

      public Rectangle(Rectangle r)
      Constructs a newRectangle, initialized to match the values of the specifiedRectangle.
      Parameters:
      r - theRectangle from which to copy initial values to a newly constructedRectangle
      Since:
      1.1
    • Rectangle

      public Rectangle(int x, int y, int width, int height)
      Constructs a newRectangle whose upper-left corner is specified as(x,y) and whose width and height are specified by the arguments of the same name.
      Parameters:
      x - the specified X coordinate
      y - the specified Y coordinate
      width - the width of theRectangle
      height - the height of theRectangle
      Since:
      1.0
    • Rectangle

      public Rectangle(int width, int height)
      Constructs a newRectangle whose upper-left corner is at (0, 0) in the coordinate space, and whose width and height are specified by the arguments of the same name.
      Parameters:
      width - the width of theRectangle
      height - the height of theRectangle
    • Rectangle

      public Rectangle(Point p,Dimension d)
      Constructs a newRectangle whose upper-left corner is specified by thePoint argument, and whose width and height are specified by theDimension argument.
      Parameters:
      p - aPoint that is the upper-left corner of theRectangle
      d - aDimension, representing the width and height of theRectangle
    • Rectangle

      public Rectangle(Point p)
      Constructs a newRectangle whose upper-left corner is the specifiedPoint, and whose width and height are both zero.
      Parameters:
      p - aPoint that is the top left corner of theRectangle
    • Rectangle

      public Rectangle(Dimension d)
      Constructs a newRectangle whose top left corner is (0, 0) and whose width and height are specified by theDimension argument.
      Parameters:
      d - aDimension, specifying width and height
  • Method Details

    • getX

      public double getX()
      Returns the X coordinate of the boundingRectangle indouble precision.
      Specified by:
      getX in class RectangularShape
      Returns:
      the X coordinate of the boundingRectangle.
    • getY

      public double getY()
      Returns the Y coordinate of the boundingRectangle indouble precision.
      Specified by:
      getY in class RectangularShape
      Returns:
      the Y coordinate of the boundingRectangle.
    • getWidth

      public double getWidth()
      Returns the width of the boundingRectangle indouble precision.
      Specified by:
      getWidth in class RectangularShape
      Returns:
      the width of the boundingRectangle.
    • getHeight

      public double getHeight()
      Returns the height of the boundingRectangle indouble precision.
      Specified by:
      getHeight in class RectangularShape
      Returns:
      the height of the boundingRectangle.
    • getBounds

      public Rectangle getBounds()
      Gets the boundingRectangle of thisRectangle.

      This method is included for completeness, to parallel thegetBounds method ofComponent.

      Specified by:
      getBounds in interface Shape
      Overrides:
      getBounds in class RectangularShape
      Returns:
      a newRectangle, equal to the boundingRectangle for thisRectangle.
      Since:
      1.1
      See Also:
    • getBounds2D

      public Rectangle2D getBounds2D()
      Returns a high precision and more accurate bounding box of theShape than thegetBounds method. Note that there is no guarantee that the returnedRectangle2D is the smallest bounding box that encloses theShape, only that theShape lies entirely within the indicatedRectangle2D. The bounding box returned by this method is usually tighter than that returned by thegetBounds method and never fails due to overflow problems since the return value can be an instance of theRectangle2D that uses double precision values to store the dimensions.

      Note that thedefinition of insideness can lead to situations where points on the defining outline of theshape may not be considered contained in the returnedbounds object, but only in cases where those points are also not considered contained in the originalshape.

      If apoint is inside theshape according to thecontains(point) method, then it must be inside the returnedRectangle2D bounds object according to thecontains(point) method of thebounds. Specifically:

      shape.contains(p) requiresbounds.contains(p)

      If apoint is not inside theshape, then it might still be contained in thebounds object:

      bounds.contains(p) does not implyshape.contains(p)

      Specified by:
      getBounds2D in interface Shape
      Overrides:
      getBounds2D in class Rectangle2D
      Returns:
      an instance ofRectangle2D that is a high-precision bounding box of theShape.
      Since:
      1.2
      See Also:
    • setBounds

      public void setBounds(Rectangle r)
      Sets the boundingRectangle of thisRectangle to match the specifiedRectangle.

      This method is included for completeness, to parallel thesetBounds method ofComponent.

      Parameters:
      r - the specifiedRectangle
      Since:
      1.1
      See Also:
    • setBounds

      public void setBounds(int x, int y, int width, int height)
      Sets the boundingRectangle of thisRectangle to the specifiedx,y,width, andheight.

      This method is included for completeness, to parallel thesetBounds method ofComponent.

      Parameters:
      x - the new X coordinate for the upper-left corner of thisRectangle
      y - the new Y coordinate for the upper-left corner of thisRectangle
      width - the new width for thisRectangle
      height - the new height for thisRectangle
      Since:
      1.1
      See Also:
    • setRect

      public void setRect(double x, double y, double width, double height)
      Sets the bounds of thisRectangle to the integer bounds which encompass the specifiedx,y,width, andheight. If the parameters specify aRectangle that exceeds the maximum range of integers, the result will be the best representation of the specifiedRectangle intersected with the maximum integer bounds.
      Specified by:
      setRect in class Rectangle2D
      Parameters:
      x - the X coordinate of the upper-left corner of the specified rectangle
      y - the Y coordinate of the upper-left corner of the specified rectangle
      width - the width of the specified rectangle
      height - the new height of the specified rectangle
    • reshape

      @Deprecatedpublic void reshape(int x, int y, int width, int height)
      Deprecated.
      As of JDK version 1.1, replaced bysetBounds(int, int, int, int).
      Sets the boundingRectangle of thisRectangle to the specifiedx,y,width, andheight.
      Parameters:
      x - the new X coordinate for the upper-left corner of thisRectangle
      y - the new Y coordinate for the upper-left corner of thisRectangle
      width - the new width for thisRectangle
      height - the new height for thisRectangle
    • getLocation

      public Point getLocation()
      Returns the location of thisRectangle.

      This method is included for completeness, to parallel thegetLocation method ofComponent.

      Returns:
      thePoint that is the upper-left corner of thisRectangle.
      Since:
      1.1
      See Also:
    • setLocation

      public void setLocation(Point p)
      Moves thisRectangle to the specified location.

      This method is included for completeness, to parallel thesetLocation method ofComponent.

      Parameters:
      p - thePoint specifying the new location for thisRectangle
      Since:
      1.1
      See Also:
    • setLocation

      public void setLocation(int x, int y)
      Moves thisRectangle to the specified location.

      This method is included for completeness, to parallel thesetLocation method ofComponent.

      Parameters:
      x - the X coordinate of the new location
      y - the Y coordinate of the new location
      Since:
      1.1
      See Also:
    • move

      @Deprecatedpublic void move(int x, int y)
      Deprecated.
      As of JDK version 1.1, replaced bysetLocation(int, int).
      Moves thisRectangle to the specified location.
      Parameters:
      x - the X coordinate of the new location
      y - the Y coordinate of the new location
    • translate

      public void translate(int dx, int dy)
      Translates thisRectangle the indicated distance, to the right along the X coordinate axis, and downward along the Y coordinate axis.
      Parameters:
      dx - the distance to move thisRectangle along the X axis
      dy - the distance to move thisRectangle along the Y axis
      See Also:
    • getSize

      public Dimension getSize()
      Gets the size of thisRectangle, represented by the returnedDimension.

      This method is included for completeness, to parallel thegetSize method ofComponent.

      Returns:
      aDimension, representing the size of thisRectangle.
      Since:
      1.1
      See Also:
    • setSize

      public void setSize(Dimension d)
      Sets the size of thisRectangle to match the specifiedDimension.

      This method is included for completeness, to parallel thesetSize method ofComponent.

      Parameters:
      d - the new size for theDimension object
      Since:
      1.1
      See Also:
    • setSize

      public void setSize(int width, int height)
      Sets the size of thisRectangle to the specified width and height.

      This method is included for completeness, to parallel thesetSize method ofComponent.

      Parameters:
      width - the new width for thisRectangle
      height - the new height for thisRectangle
      Since:
      1.1
      See Also:
    • resize

      @Deprecatedpublic void resize(int width, int height)
      Deprecated.
      As of JDK version 1.1, replaced bysetSize(int, int).
      Sets the size of thisRectangle to the specified width and height.
      Parameters:
      width - the new width for thisRectangle
      height - the new height for thisRectangle
    • contains

      public boolean contains(Point p)
      Checks whether or not thisRectangle contains the specifiedPoint.
      Parameters:
      p - thePoint to test
      Returns:
      true if the specifiedPoint is inside thisRectangle;false otherwise.
      Since:
      1.1
    • contains

      public boolean contains(int x, int y)
      Checks whether or not thisRectangle contains the point at the specified location(x,y).
      Parameters:
      x - the specified X coordinate
      y - the specified Y coordinate
      Returns:
      true if the point(x,y) is inside thisRectangle;false otherwise.
      Since:
      1.1
    • contains

      public boolean contains(Rectangle r)
      Checks whether or not thisRectangle entirely contains the specifiedRectangle.
      Parameters:
      r - the specifiedRectangle
      Returns:
      true if theRectangle is contained entirely inside thisRectangle;false otherwise
      Since:
      1.2
    • contains

      public boolean contains(int X, int Y, int W, int H)
      Checks whether thisRectangle entirely contains theRectangle at the specified location(X,Y) with the specified dimensions(W,H).
      Parameters:
      X - the specified X coordinate
      Y - the specified Y coordinate
      W - the width of theRectangle
      H - the height of theRectangle
      Returns:
      true if theRectangle specified by(X, Y, W, H) is entirely enclosed inside thisRectangle;false otherwise.
      Since:
      1.1
    • inside

      @Deprecatedpublic boolean inside(int X, int Y)
      Deprecated.
      As of JDK version 1.1, replaced bycontains(int, int).
      Checks whether or not thisRectangle contains the point at the specified location(X,Y).
      Parameters:
      X - the specified X coordinate
      Y - the specified Y coordinate
      Returns:
      true if the point(X,Y) is inside thisRectangle;false otherwise.
    • intersects

      public boolean intersects(Rectangle r)
      Determines whether or not thisRectangle and the specifiedRectangle intersect. Two rectangles intersect if their intersection is nonempty.
      Parameters:
      r - the specifiedRectangle
      Returns:
      true if the specifiedRectangle and thisRectangle intersect;false otherwise.
    • intersection

      public Rectangle intersection(Rectangle r)
      Computes the intersection of thisRectangle with the specifiedRectangle. Returns a newRectangle that represents the intersection of the two rectangles. If the two rectangles do not intersect, the result will be an empty rectangle.
      Parameters:
      r - the specifiedRectangle
      Returns:
      the largestRectangle contained in both the specifiedRectangle and in thisRectangle; or if the rectangles do not intersect, an empty rectangle.
    • union

      public Rectangle union(Rectangle r)
      Computes the union of thisRectangle with the specifiedRectangle. Returns a newRectangle that represents the union of the two rectangles.

      If eitherRectangle has any dimension less than zero the rules fornon-existent rectangles apply. If only one has a dimension less than zero, then the result will be a copy of the otherRectangle. If both have dimension less than zero, then the result will have at least one dimension less than zero.

      If the resultingRectangle would have a dimension too large to be expressed as anint, the result will have a dimension ofInteger.MAX_VALUE along that dimension.

      Parameters:
      r - the specifiedRectangle
      Returns:
      the smallestRectangle containing both the specifiedRectangle and thisRectangle.
    • add

      public void add(int newx, int newy)
      Adds a point, specified by the integer argumentsnewx,newy to the bounds of thisRectangle.

      If thisRectangle has any dimension less than zero, the rules fornon-existent rectangles apply. In that case, the new bounds of thisRectangle will have a location equal to the specified coordinates and width and height equal to zero.

      After adding a point, a call tocontains with the added point as an argument does not necessarily returntrue. Thecontains method does not returntrue for points on the right or bottom edges of aRectangle. Therefore, if the added point falls on the right or bottom edge of the enlargedRectangle,contains returnsfalse for that point. If the specified point must be contained within the newRectangle, a 1x1 rectangle should be added instead:

           r.add(new Rectangle(newx, newy, 1, 1));

      Parameters:
      newx - the X coordinate of the new point
      newy - the Y coordinate of the new point
    • add

      public void add(Point pt)
      Adds the specifiedPoint to the bounds of thisRectangle.

      If thisRectangle has any dimension less than zero, the rules fornon-existent rectangles apply. In that case, the new bounds of thisRectangle will have a location equal to the coordinates of the specifiedPoint and width and height equal to zero.

      After adding aPoint, a call tocontains with the addedPoint as an argument does not necessarily returntrue. Thecontains method does not returntrue for points on the right or bottom edges of aRectangle. Therefore if the addedPoint falls on the right or bottom edge of the enlargedRectangle,contains returnsfalse for thatPoint. If the specified point must be contained within the newRectangle, a 1x1 rectangle should be added instead:

           r.add(new Rectangle(pt, new Dimension(1, 1)));

      Parameters:
      pt - the newPoint to add to thisRectangle
    • add

      public void add(Rectangle r)
      Adds aRectangle to thisRectangle. The resultingRectangle is the union of the two rectangles.

      If eitherRectangle has any dimension less than 0, the result will have the dimensions of the otherRectangle. If bothRectangles have at least one dimension less than 0, the result will have at least one dimension less than 0.

      If eitherRectangle has one or both dimensions equal to 0, the result along those axes with 0 dimensions will be equivalent to the results obtained by adding the corresponding origin coordinate to the result rectangle along that axis, similar to the operation of theadd(Point) method, but contribute no further dimension beyond that.

      If the resultingRectangle would have a dimension too large to be expressed as anint, the result will have a dimension ofInteger.MAX_VALUE along that dimension.

      Parameters:
      r - the specifiedRectangle
    • grow

      public void grow(int h, int v)
      Resizes theRectangle both horizontally and vertically.

      This method modifies theRectangle so that it ish units larger on both the left and right side, andv units larger at both the top and bottom.

      The newRectangle has(x - h, y - v) as its upper-left corner, width of(width + 2h), and a height of(height + 2v).

      If negative values are supplied forh andv, the size of theRectangle decreases accordingly. Thegrow method will check for integer overflow and underflow, but does not check whether the resulting values ofwidth andheight grow from negative to non-negative or shrink from non-negative to negative.

      Parameters:
      h - the horizontal expansion
      v - the vertical expansion
    • isEmpty

      public boolean isEmpty()
      Determines whether theRectangularShape is empty. When theRectangularShape is empty, it encloses no area.
      Specified by:
      isEmpty in class RectangularShape
      Returns:
      true if theRectangularShape is empty;false otherwise.
      Since:
      1.2
    • outcode

      public int outcode(double x, double y)
      Determines where the specified coordinates lie with respect to thisRectangle2D. This method computes a binary OR of the appropriate mask values indicating, for each side of thisRectangle2D, whether or not the specified coordinates are on the same side of the edge as the rest of thisRectangle2D.
      Specified by:
      outcode in class Rectangle2D
      Parameters:
      x - the specified X coordinate
      y - the specified Y coordinate
      Returns:
      the logical OR of all appropriate out codes.
      Since:
      1.2
      See Also:
    • createIntersection

      public Rectangle2D createIntersection(Rectangle2D r)
      Returns a newRectangle2D object representing the intersection of thisRectangle2D with the specifiedRectangle2D.
      Specified by:
      createIntersection in class Rectangle2D
      Parameters:
      r - theRectangle2D to be intersected with thisRectangle2D
      Returns:
      the largestRectangle2D contained in both the specifiedRectangle2D and in thisRectangle2D.
      Since:
      1.2
    • createUnion

      public Rectangle2D createUnion(Rectangle2D r)
      Returns a newRectangle2D object representing the union of thisRectangle2D with the specifiedRectangle2D.
      Specified by:
      createUnion in class Rectangle2D
      Parameters:
      r - theRectangle2D to be combined with thisRectangle2D
      Returns:
      the smallestRectangle2D containing both the specifiedRectangle2D and thisRectangle2D.
      Since:
      1.2
    • equals

      public boolean equals(Object obj)
      Checks whether two rectangles are equal.

      The result istrue if and only if the argument is notnull and is aRectangle object that has the same upper-left corner, width, and height as thisRectangle.

      Overrides:
      equals in class Rectangle2D
      Parameters:
      obj - theObject to compare with thisRectangle
      Returns:
      true if the objects are equal;false otherwise.
      See Also:
    • toString

      public String toString()
      Returns aString representing thisRectangle and its values.
      Overrides:
      toString in class Object
      Returns:
      aString representing thisRectangle object's coordinate and size values.