저는 Eclipse에서 GEF 기반의 그래픽 편집기를 사용하여 xml 모델을 설명 (및 편집)하려고합니다. 내 xml 모델은 상위 - 하위 계층 구조에서 최대 5 개의 레벨을 가질 수 있습니다. 계층 구조의 각 요소는 자체 EditPart (상자 모양)입니다. 하위 요소는 부모 상자 내에 포함 된 "상자"EditParts로 표시됩니다.GEF - 부모의 다른 그림 아래에 자식 EditPart가 그려져 있습니까?
내 EditPart의 각 자손은 draw2d Figure를 가지며, 그 자체로 적어도 두 개 또는 세 개의 (장식용) draw2d 수치 자체. 장식용 인물은 Header Rectangle, 내용 사각형, 레이블 등등입니다. EditPart의 하위 EditParts 위에 그려지는 이러한 장식 인물을보고 있습니다. 이는 어떤 EditParts 자식도 볼 수 없다는 것을 의미합니다.
나는 그림의 부모의의 EditPart의 스택의 최상위로 이동하는 내가 수동으로 아이의 EditPart의 그림을 강제 곳의 일을 주위했다 :@Override
protected void refreshVisuals() {
super.refreshVisuals();
IFigure figure = getFigure();
if(figure instanceof BaseElementFigure){
//Refresh the figure...
((BaseElementFigure) figure).refresh(this);
}
if (figure.getParent() != null) {
//This moves the figure to the top of its parent's stack so it is not drawn behind the parent's other (decorative) figures
figure.getParent().add(figure);
((GraphicalEditPart) getParent()).setLayoutConstraint(this, figure, getBounds());
}
refreshChildrenVisuals();
}
그러나, 이것은 부분적으로 만했다. 하위 EditPart가 이제 부모 EditPart 위에 렌더링되었지만 Gef에 관한 한 그 아래에있었습니다. 드롭 리스너 및 툴팁과 같은 일부 Gef 이벤트는 하위 EditPart가없는 것처럼 동작합니다.
편집 :
의 EditPart의 그림이 PageFigure 그것이 자신의 장식 아이 그림의 구축 그림의 서브 클래스입니다
@Override
protected IFigure createFigure() {
return new PageFigure(this);
}
를 다음과 같이 만들어집니다. 무슨 일이 일어나고 무엇
public class PageFigure extends Figure {
protected Label headerLabel;
protected RectangleFigure contentRectangle;
protected RectangleFigure headerRectangle;
private UiElementEditPart context;
public PageFigure(UiElementEditPart context) {
this.context = context;
setLayoutManager(new XYLayout());
this.contentRectangle = new RectangleFigure();
contentRectangle.setFill(false);
contentRectangle.setOpaque(false);
this.headerRectangle = new RectangleFigure();
headerRectangle.setFill(false);
headerRectangle.setOpaque(false);
this.headerLabel = new Label();
headerLabel.setForegroundColor(ColorConstants.black);
headerLabel.setBackgroundColor(ColorConstants.lightGray);
headerLabel.setOpaque(true);
headerLabel.setLabelAlignment(Label.LEFT);
headerLabel.setBorder(new MarginBorder(0, 5, 0, 0));
headerRectangle.add(headerLabel);
add(contentRectangle);
add(headerRectangle);
//Initializing the bounds for these figures (including this one)
setBounds(context.getBounds());
contentRectangle.setBounds(new Rectangle(this.getBounds().x, this.getBounds().y + 20, this.getBounds().width, this.getBounds().height - 20));
Rectangle headerBounds = new Rectangle(this.getBounds().x, this.getBounds().y, this.getBounds().width, 20);
headerRectangle.setBounds(headerBounds);
headerLabel.setBounds(new Rectangle(headerBounds.x + 30, headerBounds.y, headerBounds.width - 30, 20));
}
}
어떻게'EditPart'의 그림이 생성됩니까? 여기에 간단한 버전을 게시 할 수 있습니까? – vainolo
위 참조 편집! – icyitscold
장식용 인물은 어디 있습니까? – vainolo