Я создаю графический редактор и создаю формы hierachies Я использую Composite Pattern, вопрос в том, как изменить размер дочерних элементов структуры Composite?Изменение размера композиции (шаблон дизайна) Форма
У меня есть следующий код, где tempGroup представляет собой составной объект, который группирует объекты для изменения размера, «инструмент изменения размера» изменяет размер фигуры из углов ограничивающей рамки.
Point p = e.getPoint();
BoundBox r = tempGroup.getBoundBox();
int dx = p.x - r.x;
int dy = p.y - r.y;
int width = 0;
int height = 0;
if (controlPoint.equals("NW")) {
width = r.width - dx;
height = r.height - dy;
tempGroup.setRectBoundBox(new Rectangle(r.x + dx, r.y + dy, width, height));
} else if (controlPoint.equals("NE")) {
width = dx;
height = r.height - dy;
tempGroup.setRectBoundBox(new Rectangle(r.x, r.y + dy, width, height));
} else if (controlPoint.equals("SW")) {
width = r.width - dx;
height = dy;
tempGroup.setRectBoundBox(new Rectangle(r.x + dx, r.y, width, height));
} else if (controlPoint.equals("SE")) {
width = dx;
height = dy;
tempGroup.setRectBoundBox(new Rectangle(r.x, r.y, width, height));
}
метод setRectBoundBox суперкласса использует Rectangle.setRect, чтобы установить новый BoundingBox и в композитной классе я пытался настроить пропорционально пути дети изменяют свои размеры, но это не похоже на работу, любую идею правильно реализовать setRectBoundBox в классе Composite ?.
Это супер метод класса:
public void setRectBoundBox(Rectangle r){
bbox.setRect(r);
}
И это то, что я пытался до сих пор реализовать ребенок размер:
public void setRectBoundBox(Rectangle r) {
Rectangle prev = (Rectangle) bbox.clone();
super.setRectBoundBox(r);
Rectangle aft = (Rectangle) bbox.clone();
for (ShapeIf sh : children) {
Rectangle chBBox = sh.getBoundBox();
Rectangle t = new Rectangle(chBBox.x * aft.x/prev.x, chBBox.y
* aft.y/prev.y, chBBox.width * aft.width/prev.width,
chBBox.height * aft.height/prev.height);
sh.setRectBoundBox(t);
}
}