Получение ширины и высоты объекта Shape в JavaFX

У меня есть метод, который принимает любой подкласс Shape (это может быть Circle, Rectangle, Polygon, Line и т. д.) и возвращает объект Shape.

public Shape returnShapeObject() {
   return circle1;
}

Проблема в том, что как только я получаю представление объекта формы моего круга, у него больше нет метода .getRadius(). У него также нет .getWidth() или .getHeight().

Как я могу получить радиус/ширину/высоту объекта Shape в 2d JavaFX?


person Gregg1989    schedule 26.03.2014    source источник
comment
Shape — это класс abstract, в нем нет функций, определенных в расширенных классах, таких как Circle и т. д. Если вы хотите использовать определенный метод, вам нужно преобразовать объект shape, например. для Circle можно использовать ((Circle) shape).getRadius(); и соответственно для других подклассов Shape.   -  person AKS    schedule 26.03.2014


Ответы (1)


Вы можете использовать метод Node#getLayoutBounds() как:

List<Shape> shapes = new ArrayList<>();
shapes.add(new Circle(30));
shapes.add(new Rectangle(200, 200));
shapes.add(new Text("some arbitrary long text for testing"));
for (Shape shape : shapes) {
    System.out.println("bounds = " + shape.getLayoutBounds());
    System.out.println("width  = " + shape.getLayoutBounds().getWidth());
    System.out.println("height = " + shape.getLayoutBounds().getHeight());
}

Будьте осторожны, чтобы внимательно прочитать javadoc этого метода.

Если вам нужны методы и свойства конкретной формы, вам следует выполнить приведение вниз, как упоминал @AKS в своем комментарии.

person Uluk Biy    schedule 26.03.2014