模型设计
1、建立通用模型,实现模型属性变化的跟踪
public class AbstractNode implements Cloneable,IPropertySource, Serializable {
…
private static final long serialVersionUID=10000100L;
private PropertyChangeSupport listeners = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener listener){
listeners.addPropertyChangeListener(listener);
}
public void firePropertyChange(String propName,Object oldValue,Object newValue){
listeners.firePropertyChange(propName,oldValue,newValue);
}
public void removePropertyChange(PropertyChangeListener listener){
listeners.removePropertyChangeListener(listener);
}
…
}
2、建立画布模型,增加子元素列表,实现子元素变化的追踪
public class DiagramNode extends AbstractNode{
public static final String P_CHILDREN ="_children";
protected List children=new ArrayList();
public void setChildren(List children){
if(children != null){
this.children=children;
}else{
this.children=new ArrayList();
}
this.firePropertyChange(P_CHILDREN, null, children);
}
public List getChildren(){
return this.children;
}
public void addChild(Object child){
children.add(child);
firePropertyChange(P_CHILDREN, null, null);
}
public void addChild(int index,Object child){
if(index == -1){
this.children.add(child);
}else{
this.children.add(index, child);
}
firePropertyChange(P_CHILDREN,null,null);
}
public void removeChild(Object child){
children.remove(child);
firePropertyChange(P_CHILDREN,null,null);
}
public void moveChild(int index,AbstractNode child){
children.remove(child);
children.add(index, child);
firePropertyChange(P_CHILDREN,null,null);
}
}
3、建立表格模型,增加子元素列表,实现对子元素变化的追踪;建立表格间距等属性的编辑和追踪管理
public class TableNode extends AbstractNode {
public static final String P_CHILDREN ="_children";
public static final String P_GRIDMANAGER="_gmanaer";
public static final String P_CHILDCHANGE="_change";
public static final String P_TABLEHSPACE="_hspace";
public static final String P_TABLEVSPACE="_vspace";
public static final String P_MARGINWIDTH="_hmargin";
public static final String P_MARGINHEIGHT="_vmargin";
public static final String P_TABLEBGCOLOR="_bgcolor";
public static final String P_OPERATE="_operate";
protected List children=new ArrayList();
private boolean border=true;
private GridLayout grid;
private int widthHint = 20;
private int heightHint = 20;
private int rows=0;
private String operate="row";
private boolean childChange=false;
private String bgColor="255:255:255";
public TableNode(){
super();
constraint.width=widthHint*4;
constraint.height=40;
}
public void setChildren(List children){
if(children != null){
this.children=children;
}else{
this.children=new ArrayList();
}
this.firePropertyChange(P_CHILDREN, null, children);
}
public List getChildren(){
return this.children;
}
public void addChild(Object child){
children.add(child);
firePropertyChange(P_CHILDREN, null, null);
}
public void addChild(int index,Object child){
if(index == -1){
this.children.add(child);
}else{
this.children.add(index, child);
}
firePropertyChange(P_CHILDREN,null,null);
}
public void removeChild(Object child){
children.remove(child);
firePropertyChange(P_CHILDREN,null,null);
}
public void moveChild(int index,AbstractNode child){
children.remove(child);
children.add(index, child);
firePropertyChange(P_CHILDREN,null,null);
}
public GridLayout getGrid() {
if(grid==null){
grid = new GridLayout();
grid.numColumns=4;
}
return grid;
}
public void setGrid(GridLayout grid) {
this.grid = grid;
this.firePropertyChange(P_GRIDMANAGER, null, grid);
}
public boolean isBorder() {
return border;
}
public void setBorder(boolean border) {
this.border = border;
}
public int getWidthHint() {
return widthHint;
}
public void setWidthHint(int widthHint) {
this.widthHint = widthHint;
}
public int getHeightHint() {
return heightHint;
}
public void setHeightHint(int heightHint) {
this.heightHint = heightHint;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public String getOperate() {
return operate;
}
public void setOperate(String operate) {
this.operate = operate;
}
public boolean isChildChange() {
return childChange;
}
public void setChildChange(boolean childChange) {
this.childChange = childChange;
this.firePropertyChange(P_CHILDCHANGE, null, null);
}
//表格属性
public int getTableHorizontalSpace(){
GridLayout grid=getGrid();
return grid.horizontalSpacing;
}
public void setTableHorizontalSpace(String ss){
GridLayout grid=getGrid();
int delta=Integer.parseInt(ss)-grid.horizontalSpacing;
if(delta != 0){
grid.horizontalSpacing=Integer.parseInt(ss);
this.firePropertyChange(P_GRIDMANAGER,null,"hspace:"+delta);
}
}
public int getTableVerticalSpace(){
GridLayout grid=getGrid();
return grid.verticalSpacing;
}
public void setTableVerticalSpace(String ss){
GridLayout grid=getGrid();
int delta=Integer.parseInt(ss) - grid.verticalSpacing ;
if(delta != 0){
grid.verticalSpacing=Integer.parseInt(ss);
this.firePropertyChange(P_GRIDMANAGER,null,"vspace:"+delta);
}
}
public int getTableHorizontalMargin(){
GridLayout grid=getGrid();
return grid.marginWidth;
}
public void setTableHorizontalMargin(String ss){
GridLayout grid=getGrid();
int delta=Integer.parseInt(ss) - grid.marginWidth;
if(delta !=0 ){
grid.marginWidth=Integer.parseInt(ss);
this.firePropertyChange(P_GRIDMANAGER,null, margin:"+delta);
}
}
public int getTableVerticalMargin(){
GridLayout grid=getGrid();
return grid.marginHeight;
}
public void setTableVerticalMargin(String ss){
GridLayout grid=getGrid();
int delta=Integer.parseInt(ss) - grid.marginHeight;
if(delta != 0){
grid.marginHeight=Integer.parseInt(ss);
this.firePropertyChange(P_GRIDMANAGER, null, "vmargin:"+delta);
}
}
public Color getBgColor() {
if(this.bgColor ==null){
return new Color(null,255,255,255);
}else{
String[] rgb=bgColor.split(":");
return new Color(null,Integer.parseInt(rgb[0]),Integer.parseInt(rgb[1]),Integer.parseInt(rgb[2]));
}
}
public void setBgColor(Color bgColor) {
this.bgColor = bgColor.getRed()+":"+bgColor.getGreen()+":"+bgColor.getBlue();
this.firePropertyChange(P_TABLEBGCOLOR, null, null);
}
分享到:
相关推荐
### 基于GEF框架的SVG制作工具设计与实现 #### 摘要与引言 本文聚焦于探讨一种新型SVG(可缩放矢量图形)制作工具的设计与实现,该工具基于Eclipse平台的GEF(Graphic Editor Framework)框架。SVG作为一种基于XML...
1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理用户交互。 2. **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联起来,处理用户交互和...
GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、视图和控制器各司其职,减少了各组件间的耦合度,提高了系统的可维护性和灵活性。 #### 二、GEF的关键组件解析 1. **模型(Model)**:模型是...
在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据、显示逻辑和用户交互。 1. **GEF框架基础**: - **模型(Model)**:...
总的来说,GEF提供了一套完整的框架,使得开发人员可以专注于业务逻辑和用户界面的设计,而无需从头构建底层的图形系统。通过对GEF的深入理解和使用,我们可以创建出高效、可扩展的图形编辑工具,广泛应用于软件建模...
GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的绘图操作。它提供了一组模型视图控制器(MVC)组件,包括图形模型、图形视图和图形编辑器,使得开发者可以方便地...
GEF主要应用于领域包括模型驱动工程(MDE)、软件建模、流程图和系统设计等。 标题"GEF Example Source Code"表明这是一个关于GEF框架的示例源代码集合,它可能包含各种演示如何使用GEF构建图形编辑功能的代码实例...
此外,gef的插件系统也可能提供了特定于流程设计的工具或功能。 6. **工作流实例(workflow1)**:在提供的压缩包文件"workflow1"中,可能包含了使用gef进行流程设计的一个具体示例。这可能是一个简单的脚本或项目...
GEF是Eclipse生态系统的一部分,利用Eclipse的插件体系,开发者可以通过编写插件来扩展其功能,创建定制化的图形编辑器。 **插件开发** 在Eclipse中至关重要,因为它是实现功能扩展的主要方式。GEF插件开发涉及创建...
3. **模型-视图-控制器(MVC)模式**:理解GEF如何遵循MVC设计模式,模型如何驱动视图的变化。 4. **定时器或事件驱动**:如何使用Java的定时器或事件监听器来控制动画的时间序列。 5. **图形变换**:如何应用矩阵...
- **模型-视图-控制器(MVC)**:GEF基于经典的MVC设计模式,其中模型负责存储数据,视图负责显示数据,而控制器则处理用户交互。 - **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联...
这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...
它提供了一套强大的工具和API,使得开发者能够快速、便捷地创建出复杂的图形用户界面,特别适合于创建数据建模、流程设计、系统配置等领域的应用程序。 "GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本...
它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域的可视化编辑器。GEF主要基于SWT/JFace技术,提供了丰富的图形绘制、事件处理、模型与视图同步等...
学习如何利用Eclipse的调试工具进行GEF应用的调试,以及编写测试用例验证功能的正确性。 10. **扩展性与可定制性** GEF的开放性和模块化设计使其具有高度的可扩展性和可定制性。开发者可以根据需求添加新的模型...
在实际开发中,首先要理解模型-视图-控制器(MVC)的设计模式,这是GEF的基础。然后,你需要创建模型类,定义图形元素的数据结构;接着,编写EditPart和Figure,实现视图的绘制和用户交互;最后,利用Command来实现...
这个项目旨在演示如何利用GEF进行图形界面开发,并且特别关注了通过适配器(Adapter)扩展点来实现属性页配置以及在非Editor的ViewPart中使用GEF。 GEF是Eclipse平台下的一个开源库,专门用于构建可自定义的、图形...
7. **扩展点和插件系统**:Eclipse的插件系统使得GEF可以无缝集成到Eclipse环境中,开发者可以利用Eclipse的扩展点来定制和扩展编辑器。 8. **样例和教程**:GEF SDK通常会包含一些示例项目和详细的开发教程,帮助...
- **EMF**:EMF(Eclipse Modeling Framework)是一个用于创建模型驱动的应用程序的框架,与GEF结合使用时能够处理复杂的模型数据。 #### 三、开发环境搭建 根据文档描述,开发环境主要包括以下组件: - **JDK**:...