最近在学习GEF开发,使用的是GEF-whole-upload这个教程。由于教程当时所使用的版本与本人使用的版本有一些差异,中间出现了不少问题,现在将解决方案分享给大家。

本人使用的Eclipse版本是3.7 Indigo,gef是3.7.1

问题1.添加布局管理器XYLayout之后Label仍旧无法显示

原因:XYLayout是采用坐标定位,没有指定坐标则无法显示Label

解决方案1:将XYLayout改为FlowLayout

解决方案2:继续按照教程往下进行加上约束

效果:

问题2:在plugin.xml中设置了contributorClass后仍然无法显示工具栏

原因:最新版的Eclipse RCP模板默认隐藏了工具栏

解决方案:在ApplicationWorkbenchWindowAdvisor类的preWindowOpen方法中将setShowCoolBar设置为true即可。注意,不是ApplicationWorkbenchAdvisor,这两个类名比较像,不要弄错了。

效果:

问题3:添加属性视图时没有找到IPropertySource这个接口,The import org.eclipse.ui.views.properties cannot be resolved

原因:没有引入org.eclipse.ui.views这个包

解决方案:在plugin.xml文件的Dependencies中加入org.eclipse.ui.views

效果:

问题4:实现功能选中连接时,安装CustomConnectionEndpointEditPolicy之后仍旧无法选中连接

原因:ArrowConnectionEditPart和LineConnectionEditPart中没有安装该Policy

解决方案:将ArrowConnectionEditPart和LineConnectionEditPart的父类修改为CustomAbstractConnectionEditPart即可

效果:

问题5:在创建可以重新定向的连接时,教程中未给出ReconnectConnectionCommand类的源代码,在自己实现的时候可能会出现一些问题。比如本人在做的时候就出现了undo无法实现的问题,花了一番功夫才找到原因。

解决方案:

在这里给出本人自己实现的源码

public class ReconnectConnectionCommand extends Command {
AbstractConnectionModel connection;
HelloModel newTarget, newSource, oldTarget, oldSource; @Override
public void execute() {
// TODO Auto-generated method stub
super.execute(); if (newSource!=null) {
oldSource = connection.getSource();
connection.detachSource();
connection.setSource(newSource);
connection.attachSource();
} if (newTarget!=null) {
oldTarget = connection.getTarget();
connection.detachTarget();
connection.setTarget(newTarget);
connection.attachTarget();
}
} @Override
public void undo() {
// TODO Auto-generated method stub
super.undo(); if (oldSource!=null) {
newSource = connection.getSource();
connection.detachSource();
connection.setSource(oldSource);
connection.attachSource();
} if (oldTarget!=null) {
newTarget = connection.getTarget();
connection.detachTarget();
connection.setTarget(oldTarget);
connection.attachTarget();
}
} public void setConnection(AbstractConnectionModel connectionModel) {
connection = connectionModel;
} public void setNewTarget(Object object) {
newTarget = (HelloModel) object;
} public void setNewSource(Object object) {
newSource = (HelloModel) object;
}
}

问题6:实现并安装DeleteBendPointCommand之后,点击工具栏上的删除按钮,会将整个连接删除,无法删除连接点

原因:删除连接点的方式不对

解决方案:在连接点上按下鼠标,拖动回原来的位置(与改变连接点位置类似,只是让连线恢复成直线)即可删除连接点。有兴趣的朋友可以试一下,在没有实现DeleteBendPointCommand之前,这样操作后连接点会自动回到原来的位置上。

该教程的完整实例可在http://download.csdn.net/detail/zhaoxy2850/5829685处下载。

转载请注明出处,谢谢!

GEF-whole-upload教程中遇到的问题及解决方案的更多相关文章

  1. i3D的一篇Unity教程中的笔记

    原地址:http://blog.sina.com.cn/s/blog_72b936d80100wwej.html 以下是i3D的一篇Unity教程中的笔记. i3D的这篇教程是[i3D.Next-Ge ...

  2. Teradata基础教程中的数据库试验环境脚本

    Teradata基础教程中的数据库表: Customer:  客户信息表 Location:  位置信息表 Employee:  雇员信息表 Job:  工作信息表 Department:  部门表 ...

  3. Swift语言教程中文文档

    Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...

  4. [转]11个教程中不常被提及的JavaScript小技巧

    原文地址: https://www.cnblogs.com/ld1024/p/10723827.html 这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日 ...

  5. 简明的Python教程中的几个疑惑点分析#2

    #1简明的Python教程当中第十四章Python标准库介绍中的使用sys模块 假如你没看懂sys模块这一章节,那么没关系,看下面一段代码再看简明的Python教程中的sys模块实例你将很容易看懂 代 ...

  6. 11个教程中不常被提及的JavaScript小技巧

    这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日常工作中经常出现,但是我们又很容易忽略. 1.过滤唯一值 Set类型是在ES6中新增的,它类似于数组,但是 ...

  7. Django 基础教程中的Django表单

    在 urls.py 中对应写上这个函数,教程中给的Django 1.7x以下的,我的时2.0.7,应该为 from django.contrib import admin from django.ur ...

  8. MVC4学习之官方教程中迁移版本库报错

    因工作需要,学习MVC4,但是微软官方教程中迁移版本库步骤在本地测试报错 官方教程地址:http://www.asp.net/mvc/overview/older-versions/getting-s ...

  9. 安装CaffeOnSpark过程中遇到的问题及解决方案

    安装教程来自 http://blog.csdn.net/sadonmyown/article/details/72781393 首先,我使用的节点环境是ubuntu 16.04.1,事先 成功安装了s ...

随机推荐

  1. HDU 1042 N! 參考代码

    HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...

  2. zsh的安装与配置

    参考: http://cnbin.github.io/blog/2015/06/01/mac-zsh-an-zhuang-he-shi-yong/ http://www.cnblogs.com/ios ...

  3. cmd 跟踪路由

    cmd   命令   tracert  ip 地址 用 来 跟踪路由

  4. Android 2.3 版本中链接边框问题解决

    在做移动互联网开发的过程中,同样需要考虑到移动终端(如手机.平板)的不同版本浏览器兼容问题,在Android 2.3 版本的默认浏览器中有一个bug-会自动给所有链接文本在点击操作过程中加黄色或绿色边 ...

  5. Object-C面向对象之实现类

    Object-C面向对象之实现类 一般涉及到面向对象都会C#,Java都不可避免的涉及到类,C#中类的后缀名是.cs,Java中是.java,Object-C中一般用两个文件描述一个类,后缀名为.h为 ...

  6. ATMEGA16 IOport相关汇总

    ATMEGA16 IOport总的共同所有权有关的寄存器有三个DDRX.PORTX和PINX. 假设你想IO动作基本上与这三个寄存器操纵.DDRX也被称为数据方向寄存器.PORTX所谓数据寄存器.PI ...

  7. leetcode第五题--Longest Palindromic Substring

    Problem:Given a string S, find the longest palindromic substring in S. You may assume that the maxim ...

  8. 图解:SQL Server SSIS包和job的部署攻略

    原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...

  9. 非接触式电子音乐控制器CHIMAERA

    本篇文章,我将介绍个有意思的设备. 她就是Chimaera,一个基于电磁场效应的非接触式电子音乐控制器. <弹奏Chimaera的声音> 霍尔效应传感器阵列及其周围部件组成了一个连续的2D ...

  10. ACdream 1195 Sudoku Checker (暴力)

    Sudoku Checker Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...