2016-01-04 6 views
0

Есть ли способ в JavaFX создать класс, который расширяет Group и ограничивать его только принятием Shape объектов в качестве детей?Группы JavaFX, которые принимают определенные типы объектов

+0

Override метод, который принимает Узлов к Shapes – Steven

+1

@Strven: Вы не можете переопределить метод с реализации, которая использует разные (кроме стирания стилей), и даже если вы не могли этого сделать, так как он нарушает [принцип замены Лискова] (https://en.wikipedia.org/wiki/Liskov_substitution_principle). – fabian

+0

Спасибо Стив. @Fabian, действительно, я не мог переопределить метод getchildren(). Add (...). Спасибо за ссылку. Я буду читать. – melkhaldi

ответ

3

Рассмотрите возможность создания класса-оболочки вместо подкласса. Что-то вдоль линий

public class ShapeGroup { 

    private final Group group = new Group() ; 

    public void addShape(Shape s) { 
     group.getChildren().add(s); 
    } 

    public void removeShape(Shape s) { 
     group.getChildren().remove(s); 
    } 

    // other methods you want to expose, implemented similarly... 

    public Parent asParent() { 
     return group ; 
    } 
} 

И теперь вы можете использовать это следующим образом:

ShapeGroup shapeGroup = new ShapeGroup(); 
shapeGroup.addShape(new Circle(50, 50, 20)); 
shapeGroup.addShape(new Rectangle(20, 20, 30, 30)); 
// ... 
Scene scene = new Scene(shapeGroup.asParent()); 
// etc.. 
+0

Спасибо James_D. Да, это решение, о котором я думал, но надеялся на другой способ избежать написания оберток для всех методов, которые я мог бы использовать из Group: /. Недавно я начал использовать параметры типа, я не уверен, почему Java не имеет этого для групп. Возможно, я ошибаюсь, но это звучит неплохо ... – melkhaldi

+0

Слишком много параметров типа загромождали API и делали бы его слишком сложным. В «Группе» очень мало методов, которые не унаследованы от «Parent», а «Parent» предоставляет только дочерние узлы в качестве немодифицируемого списка, поэтому в этом случае вам не нужно писать для обертки. –

+0

Попробуем. Благодаря! – melkhaldi

Смежные вопросы