📄 ellipsepart.java
字号:
package com.jixy.study.gef.control;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import com.jixy.study.gef.model.Ellipse;
import com.jixy.study.gef.view.EllipseFigure;
//在GEF里,模型的监听器就是EditPart,所以都要实现PropertyChangeListener接口。
public class EllipsePart extends AbstractGraphicalEditPart implements
PropertyChangeListener {
// createFigure方法返回一个新的EllipseFigure供getFigure方法调用。
protected IFigure createFigure() {
return new EllipseFigure();
}
// refreshVisuals方法首先创建一个设定好大小和位置的矩形框,
// 然后告诉它的容器类(在这里是DiagramPart)其figure被限定
// 于给定的矩形框中,这个方法会被DiagramPart的refreshChildren方法调用。
/*
* protected void refreshVisuals() { Point loc = new Point(100, 100);
* Dimension size = new Dimension(50, 50); Rectangle rectangle = new
* Rectangle(loc, size); ((GraphicalEditPart)
* getParent()).setLayoutConstraint(this, getFigure(), rectangle); }
*/
protected void refreshVisuals() {
// 图形位置不再是指定的Point(100, 100),而是取出的模型实际位置。
Ellipse node = (Ellipse) this.getModel();
Point location = node.getLocation();
Dimension size = new Dimension(50, 50);
Rectangle rectangle = new Rectangle(location, size);
((GraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(), rectangle);
}
// active ()方法里会把自己作为监听器注册到模型中
public void activate() {
if (isActive()) {
return;
}
super.activate();
((Ellipse) getModel()).addPropertyChangeListener(this);
}
// deactive ()方法去除监听
public void deactivate() {
if (!isActive()) {
return;
}
super.deactivate();
((Ellipse) getModel()).removePropertyChangeListener(this);
}
// propertyChange()方法判断属性改变事件是什么,如果是"location",则调用refreshVisuals()方法。
public void propertyChange(PropertyChangeEvent changeEvent) {
if (changeEvent.getPropertyName().equals("location"))
refreshVisuals();
}
protected void createEditPolicies() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -