Rectangle (Java 2 Platform SE v1.4.1_"07")

Overview | Package | Class | Use | Tree | Deprecated | Index | Help

JavaTM 2 Platform
Std. Ed. v1.4.1_"07"

PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## java.awt
Class Rectangle

    java.lang.Object
      |
      +--java.awt.geom.RectangularShape
            |
            +--java.awt.geom.Rectangle2D
                  |
                  +--java.awt.Rectangle

All Implemented Interfaces:
  Cloneable, Serializable, Shape

Direct Known Subclasses:
  DefaultCaret

public class Rectangle
extends Rectangle2D
implements Shape, Serializable

A `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`.

Since:
  JDK1.0
See Also:
  Serialized Form

Nested Class Summary

Nested classes inherited from class java.awt.geom.Rectangle2D
`Rectangle2D.Double, Rectangle2D.Float`

Field Summary
`int` | `height` The height of the `Rectangle`.
`int` | `width` The width of the `Rectangle`.
`int` | `x` The x coordinate of the `Rectangle`.
`int` | `y` The y coordinate of the `Rectangle`.

Fields inherited from class java.awt.geom.Rectangle2D
`OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP`

Constructor Summary
`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.
`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.
`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.
`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.
`Rectangle(Point p)` Constructs a new `Rectangle` whose top-left corner is the specified `Point`, and whose width and height are both zero.
`Rectangle(Point p, Dimension d)` Constructs a new `Rectangle` whose top-left corner is specified by the `Point` argument, and whose width and height are specified by the `Dimension` argument.
`Rectangle(Rectangle r)` Constructs a new `Rectangle`, initialized to match the values of the specified `Rectangle`.

Method Summary
`void` | `add(int newx, int newy)` Adds a point, specified by the integer arguments `newx` and `newy`, to this `Rectangle`.
`void` | `add(Point pt)` Adds the specified `Point` to this `Rectangle`.
`void` | `add(Rectangle r)` Adds a `Rectangle` to this `Rectangle`.
`boolean` | `contains(int x, int y)` Checks whether or not this `Rectangle` contains the point at the specified location (x, y).
`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).
`boolean` | `contains(Point p)` Checks whether or not this `Rectangle` contains the specified `Point`.
`boolean` | `contains(Rectangle r)` Checks whether or not this `Rectangle` entirely contains the specified `Rectangle`.
`Rectangle2D` | `createIntersection(Rectangle2D r)` Returns a new `Rectangle2D` object representing the intersection of this `Rectangle` with the specified `Rectangle2D`.
`Rectangle2D` | `createUnion(Rectangle2D r)` Returns a new `Rectangle2D` object representing the union of this `Rectangle` with the specified `Rectangle2D`.
`boolean` | `equals(Object obj)` Checks whether two rectangles are equal.
`Rectangle` | `getBounds()` Gets the bounding `Rectangle` of this `Rectangle`.
`Rectangle2D` | `getBounds2D()` Return the high precision bounding box of this rectangle.
`double` | `getHeight()` Returns the height of the bounding `Rectangle` in `double` precision.
`Point` | `getLocation()` Returns the location of this `Rectangle`.
`Dimension` | `getSize()` Gets the size of this `Rectangle`, represented by the returned `Dimension`.
`double` | `getWidth()` Returns the width of the bounding `Rectangle` in `double` precision.
`double` | `getX()` Returns the X coordinate of the bounding `Rectangle` in `double` precision.
`double` | `getY()` Returns the Y coordinate of the bounding `Rectangle` in `double` precision.
`void` | `grow(int h, int v)` Resizes the `Rectangle` both horizontally and vertically.
`boolean` | `inside(int X, int Y)` Deprecated. As of JDK version 1.1, replaced by `contains(int, int)`.
`Rectangle` | `intersection(Rectangle r)` Computes the intersection of this `Rectangle` with the specified `Rectangle`.
`boolean` | `intersects(Rectangle r)` Determines whether or not this `Rectangle` and the specified `Rectangle` intersect.
`boolean` | `isEmpty()` Determines whether or not this `Rectangle` is empty.
`void` | `move(int x, int y)` Deprecated. As of JDK version 1.1, replaced by `setLocation(int, int)`.
`int` | `outcode(double x, double y)` Determines where the specified coordinates lie with respect to this `Rectangle`.
`void` | `reshape(int x, int y, int width, int height)` Deprecated. As of JDK version 1.1, replaced by `setBounds(int, int, int, int)`.
`void` | `resize(int width, int height)` Deprecated. As of JDK version 1.1, replaced by `setSize(int, int)`.
`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`.
`void` | `setBounds(Rectangle r)` Sets the bounding `Rectangle` of this `Rectangle` to match the specified `Rectangle`.
`void` | `setLocation(int x, int y)` Moves this `Rectangle` to the specified location.
`void` | `setLocation(Point p)` Moves this `Rectangle` to the specified location.
`void` | `setRect(double x, double y, double width, double height)` Sets the bounds of this `Rectangle` to the specified `x`, `y`, `width`, and `height`.
`void` | `setSize(Dimension d)` Sets the size of this `Rectangle` to match the specified `Dimension`.
`void` | `setSize(int width, int height)` Sets the size of this `Rectangle` to the specified width and height.
`String` | `toString()` Returns a `String` representing this `Rectangle` and its values.
`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.
`Rectangle` | `union(Rectangle r)` Computes the union of this `Rectangle` with the specified `Rectangle`.

Methods inherited from class java.awt.geom.Rectangle2D
`add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union`

Methods inherited from class java.awt.geom.RectangularShape
`clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal`

Methods inherited from class java.lang.Object
`finalize, getClass, notify, notifyAll, wait, wait, wait`

Methods inherited from interface java.awt.Shape
`contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects`

Field Detail

### x

    public int x

  The x coordinate of the `Rectangle`.

  See Also:
    `setLocation(int, int)`, `getLocation()`

### y

    public int y

  The y coordinate of the `Rectangle`.

  See Also:
    `setLocation(int, int)`, `getLocation()`

### width

    public int width

  The width of the `Rectangle`.

  Since:
    JDK1.0.
  See Also:
    `setSize(int, int)`, `getSize()`

### height

    public int height

  The height of the `Rectangle`.

  See Also:
    `setSize(int, int)`, `getSize()`

Constructor Detail

### Rectangle

    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.

### Rectangle

    public Rectangle(Rectangle r)

  Constructs a new `Rectangle`, initialized to match the values of the specified `Rectangle`.

Parameters:
  `r` - the `Rectangle` from which to copy initial values to a newly constructed `Rectangle`
Since:
  JDK1.1

### Rectangle

    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.

Parameters:
  `width` - the width of the `Rectangle`
  `height` - the height of the `Rectangle`

### Rectangle

    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.

Parameters:
  `width` - the width of the `Rectangle`
  `height` - the height of the `Rectangle`

### Rectangle

    public Rectangle(Point p,
                     Dimension d)

  Constructs a new `Rectangle` whose top-left corner is specified by the `Point` argument, and whose width and height are specified by the `Dimension` argument.

Parameters:
  `p` - a `Point` that is the top-left corner of the `Rectangle`
  `d` - a `Dimension`, representing the width and height of the `Rectangle`

### Rectangle

    public Rectangle(Point p)

  Constructs a new `Rectangle` whose top-left corner is the specified `Point`, and whose width and height are both zero.

Parameters:
  `p` - a `Point` that is the top left corner of the `Rectangle`

### Rectangle

    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.

Parameters:
  `d` - a `Dimension`, specifying width and height

Method Detail

### getX

    public double getX()

  Returns the X coordinate of the bounding `Rectangle` in `double` precision.

  Specified by:
    `getX` in class `RectangularShape`
  Returns:
    the x coordinate of the bounding `Rectangle`.

### getY

    public double getY()

  Returns the Y coordinate of the bounding `Rectangle` in `double` precision.

  Specified by:
    `getY` in class `RectangularShape`
  Returns:
    the y coordinate of the bounding `Rectangle`.

### getWidth

    public double getWidth()

  Returns the width of the bounding `Rectangle` in `double` precision.

  Specified by:
    `getWidth` in class `RectangularShape`
  Returns:
    the width of the bounding `Rectangle`.

### getHeight

    public double getHeight()

  Returns the height of the bounding `Rectangle` in `double` precision.

  Specified by:
    `getHeight` in class `RectangularShape`
  Returns:
    the height of the bounding `Rectangle`.

### getBounds

    public Rectangle getBounds()

  Gets the bounding `Rectangle` of this `Rectangle`.

  This method is included for completeness, to parallel the `getBounds` method of `Component`.

  Specified by:
    `getBounds` in interface `Shape`
  Overrides:
    `getBounds` in class `RectangularShape`
  Returns:
    a new `Rectangle`, equal to the bounding `Rectangle` for this `Rectangle`.
  Since:
    JDK1.1
  See Also:
    `Component.getBounds()`, `setBounds(Rectangle)`, `setBounds(int, int, int, int)`

### getBounds2D

    public Rectangle2D getBounds2D()

  Return the high precision bounding box of this rectangle.

  Specified by:
    `getBounds2D` in interface `Shape`
  Overrides:
    `getBounds2D` in class `Rectangle2D`
  Returns:
    an instance of `Rectangle2D` that is a high-precision bounding box of the `Shape`.
  Since:
    1.2
  See Also:
    `Shape.getBounds()`

### setBounds

    public void setBounds(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`.

  Parameters:
    `r` - the specified `Rectangle`
  Since:
    JDK1.1
  See Also:
    `getBounds()`, `Component.setBounds(java.awt.Rectangle)`

### setBounds

    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`.

  Parameters:
    `width` - the new width for this `Rectangle`
    `height` - the new height for this `Rectangle`
  Since:
    JDK1.1
  See Also:
    `getBounds()`, `Component.setBounds(int, int, int, int)`

### setRect

    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`.

  Specified by:
    `setRect` in class `Rectangle2D`
  Parameters:
    `width` - the new width for the `Dimension` object
    `height` - the new height for the `Dimension` object

### reshape

    public void reshape(int x,
                        int y,
                        int width,
                        int height)

  Deprecated. As of JDK version 1.1, replaced by `setBounds(int, int, int, int)`.

  Sets the bounding `Rectangle` of this `Rectangle` to the specified `x`, `y`, `width`, and `height`.

  Parameters:
    `width` - the new width for this `Rectangle`
    `height` - the new height for this `Rectangle`

### getLocation

    public Point getLocation()

  Returns the location of this `Rectangle`.

  This method is included for completeness, to parallel the `getLocation` method of `Component`.

  Returns:
    the `Point` that is the top-left corner of this `Rectangle`.
  Since:
    JDK1.1
  See Also:
    `Component.getLocation()`, `setLocation(Point)`, `setLocation(int, int)`

### setLocation

    public void setLocation(Point p)

  Moves this `Rectangle` to the specified location.

  This method is included for completeness, to parallel the `setLocation` method of `Component`.

  Parameters:
    `p` - the `Point` specifying the new location for this `Rectangle`
  Since:
    JDK1.1
  See Also:
    `Component.setLocation(java.awt.Point)`, `getLocation()`

### setLocation

    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`.

  Since:
    JDK1.1
  See Also:
    `getLocation()`, `Component.setLocation(int, int)`

### move

    public void move(int x,
                     int y)

  Deprecated. As of JDK version 1.1, replaced by `setLocation(int, int)`.

  Moves this `Rectangle` to the specified location.

### translate

    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.

  Parameters:
    `x` - the distance to move this `Rectangle` along the x axis
    `y` - the distance to move this `Rectangle` along the y axis
  See Also:
    `setLocation(int, int)`, `setLocation(java.awt.Point)`

### getSize

    public 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`.

  Returns:
    a `Dimension`, representing the size of this `Rectangle`.
  Since:
    JDK1.1
  See Also:
    `Component.getSize()`, `setSize(Dimension)`, `setSize(int, int)`

### setSize

    public void setSize(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`.

  Parameters:
    `d` - the new size for the `Dimension` object
  Since:
    JDK1.1
  See Also:
    `Component.setSize(java.awt.Dimension)`, `getSize()`

### setSize

    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`.

  Parameters:
    `width` - the new width for this `Rectangle`
    `height` - the new height for this `Rectangle`
  Since:
    JDK1.1
  See Also:
    `Component.setSize(int, int)`, `getSize()`

### resize

    public void resize(int width,
                       int height)

  Deprecated. As of JDK version 1.1, replaced by `setSize(int, int)`.

  Sets the size of this `Rectangle` to the specified width and height.

  Parameters:
    `width` - the new width for this `Rectangle`
    `height` - the new height for this `Rectangle`

### contains

    public boolean contains(Point p)

  Checks whether or not this `Rectangle` contains the specified `Point`.

  Parameters:
    `p` - the `Point` to test
  Returns:
    `true` if the `Point` (x, y) is inside this `Rectangle`; `false` otherwise.
  Since:
    JDK1.1

### contains

    public boolean contains(int x,
                            int y)

  Checks whether or not this `Rectangle` contains the point at the specified location (x, y).

  Returns:
    `true` if the point (x, y) is inside this `Rectangle`; `false` otherwise.
  Since:
    JDK1.1

### contains

    public boolean contains(Rectangle r)

  Checks whether or not this `Rectangle` entirely contains the specified `Rectangle`.

  Parameters:
    `r` - the specified `Rectangle`
  Returns:
    `true` if the `Rectangle` is contained entirely inside this `Rectangle`; `false` otherwise.
  Since:
    JDK1.1

### contains

    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).

  Parameters:
    `W` - the width of the `Rectangle`
    `H` - the height of the `Rectangle`
  Returns:
    `true` if the `Rectangle` specified by (X, Y, W, H) is entirely enclosed inside this `Rectangle`; `false` otherwise.
  Since:
    JDK1.1

### inside

    public boolean inside(int X,
                          int Y)

  Deprecated. As of JDK version 1.1, replaced by `contains(int, int)`.

  Checks whether or not this `Rectangle` contains the point at the specified location (X, Y).

  Returns:
    `true` if the point (X, Y) is inside this `Rectangle`; `false` otherwise.

### intersects

    public boolean intersects(Rectangle r)

  Determines whether or not this `Rectangle` and the specified `Rectangle` intersect. Two rectangles intersect if their intersection is nonempty.

  Parameters:
    `r` - the specified `Rectangle`
  Returns:
    `true` if the specified `Rectangle` and this `Rectangle` intersect; `false` otherwise.

### intersection

    public Rectangle intersection(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.

  Parameters:
    `r` - the specified `Rectangle`
  Returns:
    the largest `Rectangle` contained in both the specified `Rectangle` and in this `Rectangle`; or if the rectangles do not intersect, an empty rectangle.

### union

    public Rectangle union(Rectangle r)

  Computes the union of this `Rectangle` with the specified `Rectangle`. Returns a new `Rectangle` that represents the union of the two rectangles

  Parameters:
    `r` - the specified `Rectangle`
  Returns:
    the smallest `Rectangle` containing both the specified `Rectangle` and this `Rectangle`.

### add

    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.

### add

    public void add(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`.

  Parameters:
    `pt` - the new `Point` to add to this `Rectangle`

### add

    public void add(Rectangle r)

  Adds a `Rectangle` to this `Rectangle`. The resulting `Rectangle` is the union of the two rectangles.

  Parameters:
    `r` - the specified `Rectangle`

### grow

    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.

  Parameters:
    `h` - the horizontal expansion
    `v` - the vertical expansion

### isEmpty

    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.

  Specified by:
    `isEmpty` in class `RectangularShape`
  Returns:
    `true` if this `Rectangle` is empty; `false` otherwise.

### outcode

    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`.

  Specified by:
    `outcode` in class `Rectangle2D`
  Returns:
    the logical OR of all appropriate out codes.
  Since:
    1.2
  See Also:
    `Rectangle2D.OUT_LEFT`, `Rectangle2D.OUT_TOP`, `Rectangle2D.OUT_RIGHT`, `Rectangle2D.OUT_BOTTOM`

### createIntersection

    public Rectangle2D createIntersection(Rectangle2D r)

  Returns a new `Rectangle2D` object representing the intersection of this `Rectangle` with the specified `Rectangle2D`.

  Specified by:
    `createIntersection` in class `Rectangle2D`
  Parameters:
    `r` - the `Rectangle2D` to be intersected with this `Rectangle`
  Returns:
    the largest `Rectangle2D` contained in both the specified `Rectangle2D` and in this `Rectangle`.
  Since:
    1.2

### createUnion

    public Rectangle2D createUnion(Rectangle2D r)

  Returns a new `Rectangle2D` object representing the union of this `Rectangle` with the specified `Rectangle2D`.

  Specified by:
    `createUnion` in class `Rectangle2D`
  Parameters:
    `r` - the `Rectangle2D` to be combined with this `Rectangle`
  Returns:
    the smallest `Rectangle2D` containing both the specified `Rectangle2D` and this `Rectangle`.
  Since:
    1.2

### equals

    public boolean equals(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`.

  Overrides:
    `equals` in class `Rectangle2D`
  Parameters:
    `obj` - the `Object` to compare with this `Rectangle`
  Returns:
    `true` if the objects are equal; `false` otherwise.

### toString

    public String toString()

  Returns a `String` representing this `Rectangle` and its values.

  Overrides:
    `toString` in class `Object`
  Returns:
    a `String` representing this `Rectangle` object's coordinate and size values.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help

JavaTM 2 Platform
Std. Ed. v1.4.1_"07"

PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Submit a bug or feature
For further API reference and developer documentation, see Java 2 SDK SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.

Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.