Spec-Zone.ru › OpenJDK 25

Интерфейс Shape

Все известные классы, реализующие интерфейс:
Arc2D, Arc2D.Double, Arc2D.Float, Area, BasicTextUI.BasicCaret, CubicCurve2D, CubicCurve2D.Double, CubicCurve2D.Float, DefaultCaret, Ellipse2D, Ellipse2D.Double, Ellipse2D.Float, GeneralPath, Line2D, Line2D.Double, Line2D.Float, Path2D, Path2D.Double, Path2D.Float, Polygon, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D.Float, RectangularShape, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float
public interface Shape
Интерфейс Shape предоставляет определения объектов, представляющих геометрические фигуры различных типов. Shape описывается объектом PathIterator, который может представлять контур Shape, а также правило определения того, как контур делит двумерную плоскость на внутренние и внешние точки. Каждый объект Shape предоставляет методы обратного вызова для получения ограничивающего прямоугольника геометрии, определения того, находятся ли точки или прямоугольники частично или полностью внутри внутренней области Shape, и получения объекта PathIterator, описывающего траекторию контура Shape.

Определение принадлежности внутренней области: Точка считается находящейся внутри Shape тогда и только тогда, когда:

  • она полностью находится внутри границы Shape или
  • она находится точно на границе Shape и пространство, непосредственно прилегающее к точке в направлении возрастания X, полностью находится внутри границы или
  • она находится точно на горизонтальном отрезке границы и пространство, непосредственно прилегающее к точке в направлении возрастания Y, находится внутри границы.

Методы contains и intersects считают внутренней областью Shape область, которую она ограничивает, как если бы она была заполнена. Это означает, что для определения того, содержит ли фигура прямоугольник или пересекает его либо содержит ли фигура точку, эти методы считают незамкнутые фигуры неявно замкнутыми.

Начиная с версии:
1.2
См. также:
  • PathIterator
  • AffineTransform
  • FlatteningPathIterator
  • GeneralPath

Краткое описание методов

Модификатор и тип Метод Описание
boolean contains(double x, double y)
Проверяет, находятся ли указанные координаты внутри границы Shape согласно определению принадлежности внутренней области.
boolean contains(double x, double y, double w, double h)
Проверяет, полностью ли внутренняя область Shape содержит указанную прямоугольную область.
boolean contains(Point2D p)
Проверяет, находится ли указанная Point2D внутри границы Shape согласно определению принадлежности внутренней области.
boolean contains(Rectangle2D r)
Проверяет, полностью ли внутренняя область Shape содержит указанную Rectangle2D.
Rectangle getBounds()
Возвращает целочисленный объект Rectangle, полностью охватывающий Shape.
Rectangle2D getBounds2D()
Возвращает ограничивающий прямоугольник Shape с более высокой точностью и большей аккуратностью, чем метод getBounds.
PathIterator getPathIterator(AffineTransform at)
Возвращает объект-итератор, проходящий вдоль границы Shape и предоставляющий доступ к геометрии контура Shape.
PathIterator getPathIterator(AffineTransform at, double flatness)
Возвращает объект-итератор, проходящий вдоль границы Shape и предоставляющий доступ к упрощённому представлению геометрии контура Shape.
boolean intersects(double x, double y, double w, double h)
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанной прямоугольной области.
boolean intersects(Rectangle2D r)
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанной Rectangle2D.

Подробное описание методов

getBounds

Rectangle getBounds()
Возвращает целочисленный объект Rectangle, полностью охватывающий Shape. Обратите внимание, что нет гарантии, что возвращённый Rectangle является наименьшим ограничивающим прямоугольником, охватывающим Shape; гарантируется лишь то, что Shape полностью находится внутри указанного Rectangle. Возвращённый Rectangle также может не охватывать Shape полностью, если Shape выходит за пределы ограниченного диапазона целочисленного типа данных. Метод getBounds2D обычно возвращает более точно подогнанный ограничивающий прямоугольник благодаря большей гибкости представления.

Обратите внимание, что определение принадлежности внутренней области может привести к ситуациям, в которых точки на определяющем контуре shape не считаются содержащимися в возвращённом объекте bounds, но только в случаях, когда эти точки также не считаются содержащимися в исходном shape.

Если point находится внутри shape согласно методу contains(point), то оно должно находиться внутри возвращённого объекта ограничивающих границ Rectangle согласно методу contains(point) объекта bounds. В частности:

shape.contains(x,y) влечёт bounds.contains(x,y)

Если point не находится внутри shape, оно всё же может содержаться в объекте bounds:

bounds.contains(x,y) не влечёт shape.contains(x,y)

Возвращает:
целочисленный объект Rectangle, полностью охватывающий Shape.
Начиная с версии:
1.2
См. также:
  • getBounds2D()

getBounds2D

Rectangle2D getBounds2D()
Возвращает ограничивающий прямоугольник Shape с более высокой точностью и большей аккуратностью, чем метод getBounds. Обратите внимание, что нет гарантии, что возвращённый объект Rectangle2D является наименьшим ограничивающим прямоугольником, охватывающим Shape; гарантируется лишь то, что Shape полностью находится внутри указанного Rectangle2D. Ограничивающий прямоугольник, возвращаемый этим методом, обычно точнее подогнан, чем прямоугольник, возвращаемый методом getBounds, и никогда не перестаёт работать из-за переполнения, поскольку возвращаемое значение может быть экземпляром Rectangle2D, который использует значения двойной точности для хранения размеров.

Обратите внимание, что определение принадлежности внутренней области может привести к ситуациям, в которых точки на определяющем контуре shape не считаются содержащимися в возвращённом объекте bounds, но только в случаях, когда эти точки также не считаются содержащимися в исходном shape.

Если point находится внутри shape согласно методу contains(point), то оно должно находиться внутри возвращённого объекта ограничивающих границ Rectangle2D согласно методу contains(point) объекта bounds. В частности:

shape.contains(p) влечёт bounds.contains(p)

Если point не находится внутри shape, оно всё же может содержаться в объекте bounds:

bounds.contains(p) не влечёт shape.contains(p)

Возвращает:
экземпляр Rectangle2D, представляющий собой ограничивающий прямоугольник Shape с высокой точностью.
Начиная с версии:
1.2
См. также:
  • getBounds()

contains

boolean contains(double x, double y)
Проверяет, находятся ли указанные координаты внутри границы Shape согласно определению принадлежности внутренней области.
Параметры:
x — указанная координата X для проверки
y — указанная координата Y для проверки
Возвращает:
true, если указанные координаты находятся внутри границы Shape; в противном случае — false.
Начиная с версии:
1.2

contains

boolean contains(Point2D p)
Проверяет, находится ли указанная Point2D внутри границы Shape согласно определению принадлежности внутренней области.
Параметры:
p — указанная Point2D для проверки
Возвращает:
true, если указанная Point2D находится внутри границы Shape; в противном случае — false.
Начиная с версии:
1.2

intersects

boolean intersects(double x, double y, double w, double h)
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанной прямоугольной области. Считается, что прямоугольная область пересекается с Shape, если какая-либо точка содержится одновременно во внутренней области Shape и в указанной прямоугольной области.

Метод Shape.intersects() позволяет реализации Shape консервативно возвращать true в следующих случаях:

  • существует высокая вероятность пересечения прямоугольной области и Shape, но
  • вычисления, необходимые для точного определения этого пересечения, требуют чрезмерных затрат.
Это означает, что для некоторых Shapes этот метод может вернуть true, даже если прямоугольная область не пересекается с Shape. Класс Area выполняет более точные вычисления геометрических пересечений, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат.
Параметры:
x — координата X верхнего левого угла указанной прямоугольной области
y — координата Y верхнего левого угла указанной прямоугольной области
w — ширина указанной прямоугольной области
h — высота указанной прямоугольной области
Возвращает:
true, если внутренняя область Shape и внутренняя область прямоугольника пересекаются либо с высокой вероятностью пересекаются, а вычисление пересечения потребовало бы чрезмерных затрат; в противном случае — false.
Начиная с версии:
1.2
См. также:
  • Area

intersects

boolean intersects(Rectangle2D r)
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанного Rectangle2D. Метод Shape.intersects() позволяет реализации Shape консервативно возвращать true в следующих случаях:
  • существует высокая вероятность пересечения Rectangle2D и Shape, но
  • вычисления, необходимые для точного определения этого пересечения, требуют чрезмерных затрат.
Это означает, что для некоторых Shapes этот метод может вернуть true, даже если Rectangle2D не пересекается с Shape. Класс Area выполняет более точные вычисления геометрических пересечений, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат.
Параметры:
r — указанная Rectangle2D
Возвращает:
true, если внутренняя область Shape и внутренняя область указанного Rectangle2D пересекаются либо с высокой вероятностью пересекаются, а вычисление пересечения потребовало бы чрезмерных затрат; в противном случае — false.
Начиная с версии:
1.2
См. также:
  • intersects(double, double, double, double)

contains

boolean contains(double x, double y, double w, double h)
Проверяет, полностью ли внутренняя область Shape содержит указанную прямоугольную область. Чтобы прямоугольная область считалась полностью содержащейся в Shape, все точки, находящиеся внутри неё, должны находиться в Shape.

Метод Shape.contains() позволяет реализации Shape консервативно возвращать false в следующих случаях:

  • метод intersect возвращает true и
  • вычисления, необходимые для определения того, полностью ли Shape содержит прямоугольную область, требуют чрезмерных затрат.
Это означает, что для некоторых Shapes этот метод может вернуть false, даже если Shape содержит прямоугольную область. Класс Area выполняет более точные геометрические вычисления, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат.
Параметры:
x — координата X верхнего левого угла указанной прямоугольной области
y — координата Y верхнего левого угла указанной прямоугольной области
w — ширина указанной прямоугольной области
h — высота указанной прямоугольной области
Возвращает:
true, если внутренняя область Shape полностью содержит указанную прямоугольную область; в противном случае — false, либо если Shape содержит прямоугольную область, метод intersects возвращает true, а вычисления, необходимые для проверки включения, потребовали бы чрезмерных затрат.
Начиная с версии:
1.2
См. также:
  • Area
  • intersects(double, double, double, double)

contains

boolean contains(Rectangle2D r)
Проверяет, полностью ли внутренняя область Shape содержит указанный Rectangle2D. Метод Shape.contains() позволяет реализации Shape консервативно возвращать false в следующих случаях:
  • метод intersect возвращает true и
  • вычисления, необходимые для определения того, полностью ли Shape содержит Rectangle2D, требуют чрезмерных затрат.
Это означает, что для некоторых Shapes этот метод может вернуть false, даже если Shape содержит Rectangle2D. Класс Area выполняет более точные геометрические вычисления, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат.
Параметры:
r — указанный Rectangle2D
Возвращает:
true, если внутренняя область Shape полностью содержит Rectangle2D; в противном случае — false, либо если Shape содержит Rectangle2D, метод intersects возвращает true, а вычисления, необходимые для проверки включения, потребовали бы чрезмерных затрат.
Начиная с версии:
1.2
См. также:
  • contains(double, double, double, double)

getPathIterator

PathIterator getPathIterator(AffineTransform at)
Возвращает объект-итератор, проходящий вдоль границы Shape и предоставляющий доступ к геометрии контура Shape. Если указан необязательный объект AffineTransform, координаты, возвращаемые при итерации, соответствующим образом преобразуются.

Каждый вызов этого метода возвращает новый объект PathIterator, который независимо от любых других одновременно используемых объектов PathIterator обходит геометрию объекта Shape.

Рекомендуется, но не гарантируется, чтобы объекты, реализующие интерфейс Shape, изолировали выполняющиеся итерации от любых изменений геометрии исходного объекта, которые могут произойти во время этих итераций.

Параметры:
at — необязательный объект AffineTransform, применяемый к координатам, возвращаемым при итерации, или null, если требуются непреобразованные координаты
Возвращает:
новый объект PathIterator, независимо обходящий геометрию Shape.
Начиная с версии:
1.2

getPathIterator

PathIterator getPathIterator(AffineTransform at, double flatness)
Возвращает объект-итератор, проходящий вдоль границы Shape и предоставляющий доступ к упрощённому представлению геометрии контура Shape.

Итератор возвращает только типы точек SEG_MOVETO, SEG_LINETO и SEG_CLOSE.

Если указан необязательный объект AffineTransform, координаты, возвращаемые при итерации, соответствующим образом преобразуются.

Степень разбиения криволинейных сегментов задаётся параметром flatness, который определяет максимальное расстояние, на которое любая точка исходной кривой после преобразования может отклоняться от возвращаемых сегментов упрощённого пути. Обратите внимание, что точность упрощённого пути может быть ограничена без уведомления, из-за чего очень малые значения параметра упрощения будут обрабатываться как более крупные значения. Если такое ограничение существует, оно определяется конкретной используемой реализацией.

Каждый вызов этого метода возвращает новый объект PathIterator, который независимо от любых других одновременно используемых объектов PathIterator обходит геометрию объекта Shape.

Рекомендуется, но не гарантируется, чтобы объекты, реализующие интерфейс Shape, изолировали выполняющиеся итерации от любых изменений геометрии исходного объекта, которые могут произойти во время этих итераций.

Параметры:
at — необязательный объект AffineTransform, применяемый к координатам, возвращаемым при итерации, или null, если требуются непреобразованные координаты
flatness — максимальное расстояние, на которое от любой точки исходной кривой могут отклоняться отрезки, используемые для аппроксимации криволинейных сегментов
Возвращает:
новый объект PathIterator, независимо обходящий упрощённое представление геометрии Shape.
Начиная с версии:
1.2

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/Shape.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API