⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ellipsepart.java

📁 GEF基础源码
💻 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 + -