Rectanglepublic class Rectangle extends Rectangle2D implements Shape, SerializableA Rectangle specifies an area in a coordinate space that is
enclosed by the Rectangle object's top-left point
(x, y)
in the coordinate space, its width, and its height.
A Rectangle object's width and
height are public fields. The constructors
that create a Rectangle , and the methods that can modify
one, do not prevent setting a negative value for width or height.
A Rectangle whose width or height is negative is considered
empty. If the Rectangle is empty, then the
isEmpty method returns true . No point can be
contained by or inside an empty Rectangle . The
values of width and height , however, are still
valid. An empty Rectangle still has a location in the
coordinate space, and methods that change its size or location remain
valid. The behavior of methods that operate on more than one
Rectangle is undefined if any of the participating
Rectangle objects has a negative
width or height . These methods include
intersects , intersection , and
union . |
Fields Summary |
---|
public int | xThe x coordinate of the Rectangle . | public int | yThe y coordinate of the Rectangle . | public int | widthThe width of the Rectangle . | public int | heightThe height of the Rectangle . | private static final long | serialVersionUID |
Constructors Summary |
---|
public Rectangle()Constructs a new Rectangle whose top-left corner
is at (0, 0) in the coordinate space, and whose width and
height are both zero.
/* ensure that the necessary native libraries are loaded */
Toolkit.loadLibraries();
if (!GraphicsEnvironment.isHeadless()) {
initIDs();
}
this(0, 0, 0, 0);
| public Rectangle(Rectangle r)Constructs a new Rectangle , initialized to match
the values of the specified Rectangle .
this(r.x, r.y, r.width, r.height);
| public Rectangle(int x, int y, int width, int height)Constructs a new Rectangle whose top-left corner is
specified as
(x , y ) and whose width and height
are specified by the arguments of the same name.
this.x = x;
this.y = y;
this.width = width;
this.height = height;
| public Rectangle(int width, int height)Constructs a new Rectangle whose top-left corner
is at (0, 0) in the coordinate space, and whose width and
height are specified by the arguments of the same name.
this(0, 0, width, height);
| public Rectangle(Point p, Dimension d)Constructs a new Rectangle whose top-left corner is
specified by the {@link Point} argument, and
whose width and height are specified by the
{@link Dimension} argument.
this(p.x, p.y, d.width, d.height);
| public Rectangle(Point p)Constructs a new Rectangle whose top-left corner is the
specified Point , and whose width and height are both zero.
this(p.x, p.y, 0, 0);
| public Rectangle(Dimension d)Constructs a new Rectangle whose top left corner is
(0, 0) and whose width and height are specified
by the Dimension argument.
this(0, 0, d.width, d.height);
|
Methods Summary |
---|
public void | add(int newx, int newy)Adds a point, specified by the integer arguments newx
and newy , to this Rectangle . The
resulting Rectangle is
the smallest Rectangle that contains both the
original Rectangle and the specified point.
After adding a point, a call to contains with the
added point as an argument does not necessarily return
true . The contains method does not
return true for points on the right or bottom
edges of a Rectangle . Therefore, if the added point
falls on the right or bottom edge of the enlarged
Rectangle , contains returns
false for that point.
int x1 = Math.min(x, newx);
int x2 = Math.max(x + width, newx);
int y1 = Math.min(y, newy);
int y2 = Math.max(y + height, newy);
x = x1;
y = y1;
width = x2 - x1;
height = y2 - y1;
| public void | add(java.awt.Point pt)Adds the specified Point to this
Rectangle . The resulting Rectangle
is the smallest Rectangle that contains both the
original Rectangle and the specified
Point .
After adding a Point , a call to contains
with the added Point as an argument does not
necessarily return true . The contains
method does not return true for points on the right
or bottom edges of a Rectangle . Therefore if the added
Point falls on the right or bottom edge of the
enlarged Rectangle , contains returns
false for that Point .
add(pt.x, pt.y);
| public void | add(java.awt.Rectangle r)Adds a Rectangle to this Rectangle .
The resulting Rectangle is the union of the two
rectangles.
int x1 = Math.min(x, r.x);
int x2 = Math.max(x + width, r.x + r.width);
int y1 = Math.min(y, r.y);
int y2 = Math.max(y + height, r.y + r.height);
x = x1;
y = y1;
width = x2 - x1;
height = y2 - y1;
| public boolean | contains(java.awt.Point p)Checks whether or not this Rectangle contains the
specified Point .
return contains(p.x, p.y);
| public boolean | contains(int x, int y)Checks whether or not this Rectangle contains the
point at the specified location
(x, y).
return inside(x, y);
| public boolean | contains(java.awt.Rectangle r)Checks whether or not this Rectangle entirely contains
the specified Rectangle .
return contains(r.x, r.y, r.width, r.height);
| public boolean | contains(int X, int Y, int W, int H)Checks whether this Rectangle entirely contains
the Rectangle
at the specified location (X, Y) with the
specified dimensions (W, H).
int w = this.width;
int h = this.height;
if ((w | h | W | H) < 0) {
// At least one of the dimensions is negative...
return false;
}
// Note: if any dimension is zero, tests below must return false...
int x = this.x;
int y = this.y;
if (X < x || Y < y) {
return false;
}
w += x;
W += X;
if (W <= X) {
// X+W overflowed or W was zero, return false if...
// either original w or W was zero or
// x+w did not overflow or
// the overflowed x+w is smaller than the overflowed X+W
if (w >= x || W > w) return false;
} else {
// X+W did not overflow and W was not zero, return false if...
// original w was zero or
// x+w did not overflow and x+w is smaller than X+W
if (w >= x && W > w) return false;
}
h += y;
H += Y;
if (H <= Y) {
if (h >= y || H > h) return false;
} else {
if (h >= y && H > h) return false;
}
return true;
| public java.awt.geom.Rectangle2D | createIntersection(java.awt.geom.Rectangle2D r)Returns a new {@link Rectangle2D} object
representing the intersection of this Rectangle with the
specified Rectangle2D .
if (r instanceof Rectangle) {
return intersection((Rectangle) r);
}
Rectangle2D dest = new Rectangle2D.Double();
Rectangle2D.intersect(this, r, dest);
return dest;
| public java.awt.geom.Rectangle2D | createUnion(java.awt.geom.Rectangle2D r)Returns a new Rectangle2D object representing the
union of this Rectangle with the specified
Rectangle2D .
if (r instanceof Rectangle) {
return union((Rectangle) r);
}
Rectangle2D dest = new Rectangle2D.Double();
Rectangle2D.union(this, r, dest);
return dest;
| public boolean | equals(java.lang.Object obj)Checks whether two rectangles are equal.
The result is true if and only if the argument is not
null and is a Rectangle object that has the
same top-left corner, width, and height as this Rectangle .
if (obj instanceof Rectangle) {
Rectangle r = (Rectangle)obj;
return ((x == r.x) &&
(y == r.y) &&
(width == r.width) &&
(height == r.height));
}
return super.equals(obj);
| public java.awt.Rectangle | getBounds()Gets the bounding Rectangle of this Rectangle .
This method is included for completeness, to parallel the
getBounds method of
{@link Component}.
return new Rectangle(x, y, width, height);
| public java.awt.geom.Rectangle2D | getBounds2D()Return the high precision bounding box of this rectangle.
return new Rectangle(x, y, width, height);
| public double | getHeight()Returns the height of the bounding Rectangle in
double precision.
return height;
| public java.awt.Point | getLocation()Returns the location of this Rectangle .
This method is included for completeness, to parallel the
getLocation method of Component .
return new Point(x, y);
| public java.awt.Dimension | getSize()Gets the size of this Rectangle , represented by
the returned Dimension .
This method is included for completeness, to parallel the
getSize method of Component .
return new Dimension(width, height);
| public double | getWidth()Returns the width of the bounding Rectangle in
double precision.
return width;
| public double | getX()Returns the X coordinate of the bounding Rectangle in
double precision.
return x;
| public double | getY()Returns the Y coordinate of the bounding Rectangle in
double precision.
return y;
| public void | grow(int h, int v)Resizes the Rectangle both horizontally and vertically.
This method modifies the Rectangle so that it is
h units larger on both the left and right side,
and v units larger at both the top and bottom.
The new Rectangle has (x - h ,
y - v ) as its top-left corner, a
width of
width + 2h ,
and a height of
height + 2v .
If negative values are supplied for h and
v , the size of the Rectangle
decreases accordingly.
The grow method does not check whether the resulting
values of width and height are
non-negative.
x -= h;
y -= v;
width += h * 2;
height += v * 2;
| private static native void | initIDs()Initialize JNI field and method IDs
| public boolean | inside(int X, int Y)Checks whether or not this Rectangle contains the
point at the specified location
(X, Y).
int w = this.width;
int h = this.height;
if ((w | h) < 0) {
// At least one of the dimensions is negative...
return false;
}
// Note: if either dimension is zero, tests below must return false...
int x = this.x;
int y = this.y;
if (X < x || Y < y) {
return false;
}
w += x;
h += y;
// overflow || intersect
return ((w < x || w > X) &&
(h < y || h > Y));
| public java.awt.Rectangle | intersection(java.awt.Rectangle r)Computes the intersection of this Rectangle with the
specified Rectangle . Returns a new Rectangle
that represents the intersection of the two rectangles.
If the two rectangles do not intersect, the result will be
an empty rectangle.
int tx1 = this.x;
int ty1 = this.y;
int rx1 = r.x;
int ry1 = r.y;
long tx2 = tx1; tx2 += this.width;
long ty2 = ty1; ty2 += this.height;
long rx2 = rx1; rx2 += r.width;
long ry2 = ry1; ry2 += r.height;
if (tx1 < rx1) tx1 = rx1;
if (ty1 < ry1) ty1 = ry1;
if (tx2 > rx2) tx2 = rx2;
if (ty2 > ry2) ty2 = ry2;
tx2 -= tx1;
ty2 -= ty1;
// tx2,ty2 will never overflow (they will never be
// larger than the smallest of the two source w,h)
// they might underflow, though...
if (tx2 < Integer.MIN_VALUE) tx2 = Integer.MIN_VALUE;
if (ty2 < Integer.MIN_VALUE) ty2 = Integer.MIN_VALUE;
return new Rectangle(tx1, ty1, (int) tx2, (int) ty2);
| public boolean | intersects(java.awt.Rectangle r)Determines whether or not this Rectangle and the specified
Rectangle intersect. Two rectangles intersect if
their intersection is nonempty.
int tw = this.width;
int th = this.height;
int rw = r.width;
int rh = r.height;
if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
return false;
}
int tx = this.x;
int ty = this.y;
int rx = r.x;
int ry = r.y;
rw += rx;
rh += ry;
tw += tx;
th += ty;
// overflow || intersect
return ((rw < rx || rw > tx) &&
(rh < ry || rh > ty) &&
(tw < tx || tw > rx) &&
(th < ty || th > ry));
| public boolean | isEmpty()Determines whether or not this Rectangle is empty. A
Rectangle is empty if its width or its height is less
than or equal to zero.
return (width <= 0) || (height <= 0);
| public void | move(int x, int y)Moves this Rectangle to the specified location.
this.x = x;
this.y = y;
| public int | outcode(double x, double y)Determines where the specified coordinates lie with respect
to this Rectangle .
This method computes a binary OR of the appropriate mask values
indicating, for each side of this Rectangle ,
whether or not the specified coordinates are on the same side of the
edge as the rest of this Rectangle .
/*
* Note on casts to double below. If the arithmetic of
* x+w or y+h is done in int, then we may get integer
* overflow. By converting to double before the addition
* we force the addition to be carried out in double to
* avoid overflow in the comparison.
*
* See bug 4320890 for problems that this can cause.
*/
int out = 0;
if (this.width <= 0) {
out |= OUT_LEFT | OUT_RIGHT;
} else if (x < this.x) {
out |= OUT_LEFT;
} else if (x > this.x + (double) this.width) {
out |= OUT_RIGHT;
}
if (this.height <= 0) {
out |= OUT_TOP | OUT_BOTTOM;
} else if (y < this.y) {
out |= OUT_TOP;
} else if (y > this.y + (double) this.height) {
out |= OUT_BOTTOM;
}
return out;
| public void | reshape(int x, int y, int width, int height)Sets the bounding Rectangle of this
Rectangle to the specified
x , y , width ,
and height .
this.x = x;
this.y = y;
this.width = width;
this.height = height;
| public void | resize(int width, int height)Sets the size of this Rectangle to the specified
width and height.
this.width = width;
this.height = height;
| public void | setBounds(java.awt.Rectangle r)Sets the bounding Rectangle of this Rectangle
to match the specified Rectangle .
This method is included for completeness, to parallel the
setBounds method of Component .
setBounds(r.x, r.y, r.width, r.height);
| public void | setBounds(int x, int y, int width, int height)Sets the bounding Rectangle of this
Rectangle to the specified
x , y , width ,
and height .
This method is included for completeness, to parallel the
setBounds method of Component .
reshape(x, y, width, height);
| public void | setLocation(java.awt.Point p)Moves this Rectangle to the specified location.
This method is included for completeness, to parallel the
setLocation method of Component .
setLocation(p.x, p.y);
| public void | setLocation(int x, int y)Moves this Rectangle to the specified location.
This method is included for completeness, to parallel the
setLocation method of Component .
move(x, y);
| public void | setRect(double x, double y, double width, double height)Sets the bounds of this Rectangle to the specified
x , y , width ,
and height .
This method is included for completeness, to parallel the
setBounds method of Component .
int x0 = (int) Math.floor(x);
int y0 = (int) Math.floor(y);
int x1 = (int) Math.ceil(x+width);
int y1 = (int) Math.ceil(y+height);
setBounds(x0, y0, x1-x0, y1-y0);
| public void | setSize(java.awt.Dimension d)Sets the size of this Rectangle to match the
specified Dimension .
This method is included for completeness, to parallel the
setSize method of Component .
setSize(d.width, d.height);
| public void | setSize(int width, int height)Sets the size of this Rectangle to the specified
width and height.
This method is included for completeness, to parallel the
setSize method of Component .
resize(width, height);
| public java.lang.String | toString()Returns a String representing this
Rectangle and its values.
return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]";
| public void | translate(int x, int y)Translates this Rectangle the indicated distance,
to the right along the x coordinate axis, and
downward along the y coordinate axis.
this.x += x;
this.y += y;
| public java.awt.Rectangle | union(java.awt.Rectangle r)Computes the union of this Rectangle with the
specified Rectangle . Returns a new
Rectangle that
represents the union of the two rectangles
int x1 = Math.min(x, r.x);
int x2 = Math.max(x + width, r.x + r.width);
int y1 = Math.min(y, r.y);
int y2 = Math.max(y + height, r.y + r.height);
return new Rectangle(x1, y1, x2 - x1, y2 - y1);
|
|