发现一个好玩的东西,gef-gwt,使用它可以轻松的在web上建立gef程序,原文在这里http://gefgwt.org/getting-started/(文章虽然是英文,但是很容易懂,我是按部就班的记录下来,这其中包括了我遇到的问题)

在完成这个网页上的内容后,运行程序,会得到下面的效果:

我是觉得很酷,可以在网页上显示Gef的东西!

下面就是step by step的步骤,本篇文章不谈原理,只希望能跑的通! Don’t be scared, the description is quite detailed but each step is really easy.

配置信息

先说一下我当前的配置(2013.07.03)

jdk的版本是1.7

eclipse的版本是4.2.0(不知道怎么看?eclipse安装目录\readme\readme_eclipse.html

下面,我们开始吧!

下载GEFGWT

打开http://gefgwt.org/download/网址,你会看到这个:

把它下载下来,假设你下载到download的里面了,下载好了之后,先不管它(就是说,不要解压,也不要install到IDE中)

安装GWT

这是google开发的一个eclipse plugin,下载地址在https://developers.google.com/eclipse/docs/getting_started

我用到的是这一个,复制到install的workwith中,然后下载就可以啦。

(还有一点要补充的是,jdk至少是1.6的哦!(环境变量里面要配置好)不然,无法往下做了T.T)

创建一个Web Application project

web application project是由刚刚安装的google plug-in提供的。

选中web application project,然后点击next。我们创建一个新的工程,名字是MyProject,包名是mypackage。(最好叫这个名字,这样过一会你可以直接把代码copy过来运行)

然后把Google App Engine这一项勾掉,因为,我们暂时不需要它。

这个Wizard会自动为我们生成GWT中client和server部分的代码,我们主要关注的是client部分。

转换为plug-in项目

GEF是基于插件开发的,而在GWT和JavaScript中是没有plug-in的概念。我们希望仍然使用插件开发环境(PDE)来管理GEFGWT的代码,这是因为PDE在管理依赖(dependency)方面的表现是在是太棒了,所以转换之后方便多多。在workspace中,GWT仍然会将项目当做Java项目来处理,但是对于我们而言,看到的是一个Plug-in程序(两不误,很赞)。

在使用GWT编译之后,所有关于Plugin的东西都会被移除。

下面看看怎么转换吧:

右键选中项目,然后选择configure->convert to plug-in projects...

转换之后GWT的特征仍会被保留下来,而plug-in程序的特征会被加上去。

创建target定义

现在已经是Plug-in的工程了,在设置依赖(dependencies)之前,我们需要一个target platform。

下面我们来创建吧:

如果找到的眼花缭乱,在wizards中输入target就会出来了。然后把这个文件命名为gefgwt。

完成之后,点击add来添加一个site。

在这个窗口里面,将site命名为gefgwt,然后把我们前面下载的zip文件(download里面的)导入(Archive)。

点击确定你会看到site中包含了两个东西,我们全选。

你会看到target definitions中显示,我们已经有了19个plugins(19 plug-ins available)。

然后点击右上角的set as target platform。

添加依赖(dependencies)

打开META-INF下的MANIFEST.MF文件,然后添加GEF和shapes example到我们的项目中,如下图所示。

你可以在dependencies中看到已经添加的依赖包。

在xml文件中添加继承节点

   <inherits name='org.eclipse.gef.Gef'/>
<inherits name='org.eclipse.gef.examples.shapes.Shapes'/>

重写MyProject.java

创建一个entry point来显示这些图形,在我们创建项目的时候,系统已经为我们生成了很多代码,删掉它,重新写一下。

 package mypackage.client;

 import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditDomain;
import org.eclipse.gef.examples.shapes.model.EllipticalShape;
import org.eclipse.gef.examples.shapes.model.RectangularShape;
import org.eclipse.gef.examples.shapes.model.ShapesDiagram;
import org.eclipse.gef.examples.shapes.parts.ShapesEditPartFactory;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.Widget; import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite; public class MyProject implements EntryPoint {
@Override
public void onModuleLoad() {
ScrollingGraphicalViewer sgv = new ScrollingGraphicalViewer(); Composite composite = new Composite(null, SWT.NONE); sgv.createControl(composite);
sgv.setEditPartFactory(new ShapesEditPartFactory());
sgv.setEditDomain(new EditDomain());
sgv.setContents(createContent());
Widget gwtWidget = composite.getGwtWidget();
RootLayoutPanel.get().add(gwtWidget);
} private Object createContent() {
ShapesDiagram diagram = new ShapesDiagram();
RectangularShape rs = new RectangularShape();
rs.setSize(new Dimension(75, 75));
rs.setLocation(new Point(10, 10));
EllipticalShape es = new EllipticalShape();
es.setSize(new Dimension(140, 70));
es.setLocation(new Point(100, 100));
diagram.addChild(rs);
diagram.addChild(es);
return diagram;
}
}

运行

通过右键以web application的方式运行。

在Development Mode view中会看到运行的结果,出来一个URL,可以双击运行,也可以右键选择其他浏览器运行(一般都需要安装插件)。

当运行之后,GWT会将JavaScript代码放到local code server中,一般而言,这需要一些时间(因为要放的东西不止一点点)。

现在浏览器中就有结果啦!

Hello world到此结束。

我遇到的问题

  • Widget gwtWidget = composite.getGwtWidget; ERROR!can’t find the getGwtWidget() method?

  忘记set as target paltform了

  • The type org.eclipse.swt.widgets.Composite cannot be resolved. It is indirectly referenced from   required .class files

诡异的错误。把workspace下的.metadata删除,然后重新导入,把target文件重新整一下就好了。好了是好了,不过,关掉eclipse再重启,问题又出来了,Google了好久,也没有适合我的解决方法。于是...

 我把之前.zip文件里面的jar包解压出来,然后导入到工程中,然后就没错了0 0..但是不知道会不会有新的问题。

如果你有新的方法,那么,请告诉我。

(本文网址:http://www.cnblogs.com/marsdu/p/3169314.html

GEFGWT的HelloWorld的更多相关文章

  1. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  2. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...

  3. 菜鸟学Struts2——HelloWorld

    写在前面 自从工作后就过上了只有一个月记忆的生活,太健忘,很多学过的东西因为用得少便忘记了,第二次学习struts,为了以后便于查阅,开始自己的博客之旅.Struts的学习还是从Hello World ...

  4. 初识AngularJS 之 HelloWorld和数据绑定

    1.Hello World 我用的开发工具是   atom   ,大家有需要的话可以找我要安装包嘻嘻 第一步: 写入以下代码: <!DOCTYPE html> <html ng-ap ...

  5. java环境搭建和写出一个Helloworld

    一.安装环境和配置环境变量(必要环节) 安装java并配置环境变量 :在"系统变量"中设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击 ...

  6. Delphi_01_控制台版HelloWorld

    对于Windows下的控制台编程,我相信很多人都不陌生.而C语言开始的著名的“Hello world”程序基本是学习编程的第一步.我想对于 RAD开发,大家熟悉的一般都是GUI编程,而对于consol ...

  7. Quartz —— 从 HelloWorld 开始

    1.Quartz 是用来完成任务调度的. 2.Quartz 的三个核心概念:调度器.任务.触发器. (1)Job:通过实现该接口来定义需要执行的任务. public interface Job { / ...

  8. 转载文章——从HelloWorld学习操作系统

    转载地址:https://my.oschina.net/hosee/blog/673628?p=%7b%7bcurrentPage+1%7d%7d 本文就将系统性的串联起那些知识点,方便复习和回顾.本 ...

  9. AngularJS 系列 01 - HelloWorld和数据绑定

    目录导读: AngularJS 系列 学习笔记 目录篇 前言: 好记性不如烂键盘,随笔就是随手笔记,希望以后有用. 本篇目录: 1. Hello World 2. AngularJS中的数据绑定 3. ...

随机推荐

  1. 6.QT信号和槽

     新建项目SignalAndSlot项目 编写代码如下: mysignal.h #ifndef MYSIGNAL_H #define MYSIGNAL_H   #include <QObje ...

  2. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧

    因为写博客总是需要录制 Android 软件的演示效果, 研究了将近一小时找到了合适的工具; 录制流程 : -- 1. 录制 Android 手机屏幕内容 : 使用 拍大师 软件录制 Android ...

  3. java编程小记

    http://blog.csdn.net/pipisorry/article/details/51050189 很久没写java,什么都不会了,小记一下. 类型转换 字符串转int类型:Integer ...

  4. Oracle EBS R12文件系统结构(学习汇总网上资料)

    Oracle EBS R12在服务器端文件结构如下: 顶层目录下面分为 1)inst --–跟ebs整个实例(instance)相关的配置信息以及其他信息 2)  db   ---主要存储DB层的信息 ...

  5. java linux ImageIO 验证码在一段时间以后出不来 问题总结

    最近在测试上布署的项目经常性的出现验证码过了一段时间以后出不来的情况,耐心找了一下,最后在上级的指导下发现了报错,其实说真的,我自己也找到了这个报错,只是没有当一回事.因为这个验证码的东西不是我写的, ...

  6. 在golang中使用leveldb

    leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用. 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否 ...

  7. noSQL数据库相关软件介绍(大数据存储时候,必须使用)

    目前图数据库软件七种较为流行:Neo4J, Infinite Graph, DEX,InfoGrid, HyperGraphDB, Trinity, AllegroGraph(http://tech. ...

  8. 【Python】Talk Python To Me Podcast播客

    这是Python相关的一个播客,通过播客的形式给大家讲述python那点事,相关的链接都会列出来,有一些是由文本内容的,如果听不太懂就看看英文原文.不fanqiang的情况下,网页打开没有问题,但是播 ...

  9. mysql进阶(二)索引简易教程

    Mysql索引简易教程 基本概念 索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容.在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找. ...

  10. 高通 MSM8K bootloader 之四: ramdump

    前面说过高通平台,系统crash发生时,抓取crash ramdump非常重要,否则很难定位crash原因. 平台默认抓取ramdump的方法都有很强的局限性,如下: 1.PC端工具QPST提供的 M ...