`
manzhizhen
  • 浏览: 293353 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

GEF小技巧之设定GraphicalEditor中图元为选中状态

    博客分类:
  • GEF
阅读更多

        我们也许会有这样的需求,类似于Powerdesigner那样,在左边的树上的表格点击鼠标右键,在弹出快捷菜单中点击“Find in Diagram”(在图中查找)的功能,说白了,就是实现鼠标点击某图元的效果。

        因为是在GEF框架中,是先用户修改界面,控制器捕获修改信息,用Command来修改模型,模型的改变才会使控制器来最终改变画面。

        假设我们要选择的GEF模型为TableGefModel,其对应的控制器为TableGefModelEditPart;

        在TableGefModel中添加两个常量属性来标记状态的改变:

 public static final String TABLE_SELECT = "table_select";// 选中标记
 public static final String TABLE_NONE_SELECT = "table_none_select";// 不选中标记

        再添加一个成员方法:

 /**
  * 设置图元是否被选中状态
  * @param selected
  */
 public void setSelected(boolean selected) {
  if(selected) {
   firePropertyListenerChange(TABLE_SELECT, null, null);
  } else {
   firePropertyListenerChange(TABLE_NONE_SELECT, null, null);
  }
 }

 

接着需要修改控制器TableGefModelEditPart中的刷新方法:

 @Override
 public void propertyChange(PropertyChangeEvent evt) {

       .... ....

// 选中某一个表格
   if(evt.getPropertyName().equals(TableGefModel.TABLE_SELECT)) {
//   setSelected(EditPart.SELECTED_PRIMARY);
//   setSelected(EditPart.SELECTED_PRIMARY);
   getFigure().requestFocus();
   getViewer().appendSelection(this);   
   
  // 取消某一个表格的选中状态 
  } else if(evt.getPropertyName().equals(TableGefModel.TABLE_NONE_SELECT)) {
   setSelected(EditPart.SELECTED_NONE);
  }

}

 

当然,我们在选中某图形前,还需要取消该GraphicalEditor中其他图元的选中状态,所以,在选中目标图元之前,需要取消该GraphicalEditor中的集合模型(DatabaseDiagramGefModel )中的所有子模型(TableGefModel)的选中状态,参考代码:

DatabaseDiagramGefModel databaseDiagramGefModel = databaseDiagramEditor.getDatabaseDiagramGefModel(); // 获取Editor中的集合模型
      List<AbstractGefModel> getModelList = databaseDiagramGefModel.getChildren(); // 获取集合模型中的所有子模型
      for(AbstractGefModel abstractGefModel : getModelList) {

       // 先设置该模型为不选中状态
       ((TableGefModel)abstractGefModel).setSelected(false);

 

       // 如果该模型是我们需要选中的模型,则设置为选中状态
       if(tableModel.equals(abstractGefModel.getDataObject())){
         ((TableGefModel)abstractGefModel).setSelected(true);
       }
      }
     

 

注意,我们在设置选中状态时,不能用setSelected(EditPart.SELECTED_PRIMARY);
或者setSelected(EditPart.SELECTED_PRIMARY);因为此操作并不会激活控制器对应的状态栏等。至于是什么原因,由于开发时间紧,没仔细研究,以后补充!

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    gef小例子(含文档)

    Gef(Generic Eclipse Debugging Framework)是一个强大的开源调试框架,它为Eclipse IDE提供了一种灵活的方式来调试各种程序,包括但不限于C/C++、Python等。这个压缩包“gef小例子(含文档)”似乎包含了一些示例...

    自己下的GEF资源打包

    "gefpractice31.zip"则可能是包含了一个或多个实际的GEF项目实例,用户可以解压后运行,通过观察和修改代码来实践和学习GEF的实际运用技巧。这种实践性的学习方式有助于提升开发者对GEF的理解和应用能力。 "GEF-...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...

    GEF开发指南

    随后,开发者需要创建一个继承自org.eclipse.gef.ui.parts.GraphicalEditor的类,该类用于定义我们自己的图形编辑器。这个过程涉及到了将EditorPart整合到插件中的步骤,并需要在类中定义EditDomain。 除此之外,...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    总的来说,gef转折线的实现涉及PathFigure和Segment的组合使用,而GEF的API为开发者提供了丰富的工具和接口,使得构建交互式图形编辑器变得简单。通过熟练掌握这些知识,开发者可以轻松创建出具有复杂图形交互功能的...

    GEF简易教程-学习GEF的入门教程

    **GEF**,全称为**Graphical Editing Framework**,是Eclipse平台上用于创建复杂图形编辑器的框架。它提供了一套完整的工具集,使开发者能够构建具有图形化用户界面的应用程序,特别适用于创建基于模型的编辑器。 ...

    GEF Example Source Code

    **GEF(Graphical Editing Framework)** 是一个用于构建图形编辑工具的开源框架,它为开发人员提供了一套全面的库和工具,用于创建基于Eclipse的富客户端平台(RCP)的应用程序,特别是那些涉及图形用户界面(GUI)...

    GEF入门学习例子

    在GEF中,可以通过自定义小部件并集成到视图中来实现这一功能。 7. **文件名称列表**: `gef.tutorial.step2`可能代表了一个逐步教程的第二步,通常包含了一些示例代码和配置文件,用于演示上述概念的实现。 学习这...

    Eclipse的GEF学习

    GEF,全称为Graphical Editor Framework,是Eclipse平台下的一款图形编辑框架,主要用于构建图形化编辑器,如流程设计器、UML类图编辑器等。GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、...

    GEF-Update-3.7.1.zip

    GEF(Graphical Editing Framework)是Eclipse平台上一个强大的图形编辑框架,主要用于构建可视化的建模和图形编辑工具。更新到3.7.1版本,它提供了许多改进和新功能,以满足开发者在创建图形用户界面时的需求。在这...

    GEF开发整合资料大全

    GEF(Graphical Editing Framework)是Eclipse平台下的一款用于构建图形化编辑器的框架,它为开发者提供了一套全面的工具和API,使得创建复杂的图形用户界面(GUI)变得简单。GEF主要用于开发基于模型的图形编辑器,...

    GEF 入门教程 中文版

    GEF为开发者提供了一整套解决方案,用于Java对象模型的图形化建模。它可以与EMF(Eclipse Modeling Framework,即Eclipse建模框架)或GMF(Graphical Modeling Framework,即图形建模框架)等其他技术结合使用,以便...

    GEF教程和demo源码

    GEF,全称为Graphical Editing Framework,是Eclipse平台上用于构建图形化编辑器的一种框架。它为开发人员提供了丰富的工具,可以方便地创建出复杂的图形用户界面,尤其是用于创建模型驱动的图形编辑器。在本教程中...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    【GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料】是一份综合性的资源包,包含了GEF(Graphical Editing Framework)的3.7和3.8版本以及与其相关的Draw2D库的学习材料。GEF是Eclipse平台上用于构建图形化编辑器框架的...

    GEF-SDK-3.7.0

    Eclipse的插件体系结构允许开发者通过安装插件来扩展其功能,GEF就是这样的插件之一,专注于图形编辑领域。 **使用GEF-SDK-3.7.0开发步骤**: 1. **环境准备**:首先需要安装Eclipse IDE,并确保它包含PDE(Plug-in...

    gef-step3.zip_3gef_GEF eclipse_GEF-step2_gef_gef-st

    **GEF(Graphical Editing Framework)图形编辑框架**是Eclipse平台中的一个重要组成部分,它为开发者提供了一套全面的工具和API,用于构建强大的图形用户界面(GUI)应用程序,特别是那些涉及图形化编辑和建模的...

    java开发工具插件 GEF

    GEF的灵活性和强大的功能使其成为Java开发中图形化应用程序的首选框架之一。在实际开发过程中,通常会结合其他Eclipse插件,如EMF( Eclipse Modeling Framework)用于生成模型类,以进一步提升开发效率。

    GEF-SDK-3.6.2 jar

    《GEF-SDK-3.6.2 jar:Eclipse GEF框架详解及在Android ADT中的应用》 GEF(Graphical Editing Framework)是Eclipse项目中的一个重要组成部分,它为开发图形化编辑器提供了强大的支持。在标题“GEF-SDK-3.6.2 jar...

    GEF教程

    GEF,全称为Graphical Editor Framework,是Eclipse平台下一款强大的图形编辑框架,专为开发图形用户界面而设计。它允许开发者创建复杂的图形编辑器,如流程图编辑器、UML类图编辑器等,极大地提升了用户的交互体验...

Global site tag (gtag.js) - Google Analytics