八进制

少年壮志无烟抽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  232 随笔 :: 0 文章 :: 3015 评论 :: 11 Trackbacks

前些天换了新电脑,本人一直处于兴奋中,基本是"不务正业"的状态。快过年了,虽然没什么动力干活,但我玩游戏技术比较差,魔兽3打电脑一家还很费劲,干脆写写帖子就当是休息吧!

由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。其实一年多来我们做的项目都是和它有关的,只是之前我具体负责的事情和它没什么关系。那时也看过黄老大写的代码,EMF和GEF混在一起特别晕,没能坚持看下去。这次自己要动手做了,正好趁此机会把它搞明白,感觉GEF做出来的东西给人很专业的感觉,功能也很强大,应该挺有前途的。此外,GEF里用到了很多经典模式,最突出的如大量应用Command模式,方便的实现Undo/Redo功能等等,通过学习GEF,等于演练了这些模式,比只是看看书写几个类那种学习方式的效果好很多。

现在网上关于GEF的文章和教程还不是很多(比起一年前还是增加了几篇),基本上都是eclipse.org上的那些,其中少数几篇有中文版,中文的原创就属于凤毛麟角了,市场上似乎也没有这方面的成书。GEF SDK里自带的文档则比较抽象,不适合入门。我觉得最好的入门方法是结合具体的例子,一边看代码,一边对照文档,然后自己再动手做一做。当然这个例子要简单点才好,像GEF的那个logic的例子就太复杂了,即使是flow(运行界面见下图)我觉得也有点大;另外例子要比较规范的,否则学成错误的路子以后还要花时间改就不值得了。

用GEF编写的流程编辑器

 GEF的结构决定了GEF应用程序的复杂性,即使最最简单的GEF程序也包含五六个包和十几个类,刚开始接触时有点晕是很正常的。我找到一个还不错的例子,当然它很简单了,如果你现在就想自己试试GEF,可以点这里下载一个zip包(若已无法下载请用这个链接),展开后是六个项目(pt1,pt2,…,pt6),每一个是在前面一个的基础上增加一些功能得到的,pt1是最简单的一个,这样你就可以看到那些典型的功能(例如DirectEdit、Palette等等)在GEF里应该怎样实现了。关于这个例子的更多信息请看作者blog上的说明

Back in March, I talked a little about my initial attempts writing an Eclipse Graphical Editor Framework (GEF) application. I wanted, then, to write a tutorial that essentially walked the reader through the various stages of the development of my first application. I even suggested some kind of versioned literate programming approach to writing the tutorial and the code at the same time. 

I haven't had time since then to make any progress, but I did get the GEF application to the stage where I had put together a snapshot at each of six milestones. A few people have written to me over the last six months asking the status of my tutorial and I've sent them my six snapshots as a starting point. 

It makes sense for me to just to offer them here. 

You can download a ZIP file with the six snapshots at http://jtauber.com/2004/gef/gef.zip. 

Hopefully they are still useful, even without a surrounding tutorial.”

需要注意一点,这个例子应该是在Eclipse 2.1里写的,所以如果你想在Eclipse 3里运行这个例子,要修改plugin.xml里的dependencies为:

<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.gef"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>
<import plugin="org.eclipse.ui.views"/>

 再修改一下DiagramCreationWizard这个类finish()方法里page.openEditor(newFile);这句改为page.openEditor(new FileEditorInput(newFile),"com.jtauber.river.editor");,还有一些warning不太影响,可以不用管。

或者如果你不是特别着急的话,留意我这个半新手写的GEF入门系列帖子,说不定能引起你更多的共鸣,也是一个办法吧。

GEF的学习周期是比较长的,学之前应该有这个心理准备。特别是如果你没有开发过Eclipse插件,那么最好先花时间熟悉一下Eclipse的插件体系结构,这方面的文章还是很多的,也不是很难,基本上会开发简单的Editor就可以了,因为GEF应用程序一般都是在Editor里进行图形编辑的。另外,绝大多数GEF应用程序都是基于Draw2D的,可以说GEF离不开Draw2D,而后者有些概念很难搞明白,加上其文档比GEF更少,所以我会从Draw2D开始说起,当然不能讲得很深入,因为我自己也是略知皮毛而已。

说实话,我对写这个系列不太有信心,因为自己也是刚入门而已。但要是等到几个月后再写,很多心得怕是讲不出来了。所以还是那句话,有什么写错的请指正,并且欢迎交流。

posted on 2005-02-05 17:17 八进制 阅读(26855) 评论(67)  编辑 收藏 所属分类: EclipseGEF

评论

#1楼  2005-02-17 23:53 郭奕 [未注册用户]
您好,看了您的blog非常感谢。我正看IBM的redbook,找不到门道呢。热切期待中!
eric_guoyi@hotmail.com
  回复  引用    

#2楼  2005-02-22 00:02 yadan [未注册用户]
写的很好 支持你!
  回复  引用    

#3楼  2005-03-06 20:29 howjay [未注册用户]
为什么我下载了那个gef的例子后在Eclipse3.0.1里面运行时提示“不能解析导入 org.eclipse.ui.dialogs.WizardNewFileCreationPage”,然后还有许多其他错误在ui下面的两个文件里
  回复  引用    

#4楼 [楼主] 2005-03-06 21:07 八进制      
那个例子是Eclipse 2.1里用的,所以Editor和NewFileWizard在3.0.1下会有问题,按我文中所说的方法改一下试试看。
  回复  引用  查看    

#5楼  2005-03-06 23:08 howjay [未注册用户]
我是改过后还有问题哎。我现在终于对 GEF 和 Draw2D 有点了解了,对我的毕设帮助很大。我基本上只要支持新建图形及图形之间的链接,而不需要编辑图形,使用Draw2D应该就够了吧?
  回复  引用    

#6楼 [楼主] 2005-03-07 10:53 八进制      
新建图形和连接也是对图形的编辑(把整个Diagram想成一个大图形),当然只用draw2d也可以实现,你自己就要考虑新建图形的位置、大小等问题了。
那个例子改过后应该有警告没有错误的……
  回复  引用  查看    

#7楼  2005-03-07 12:28 howjay [未注册用户]
这样啊,我只是不知道能不能掌握GEF,关键是现在还没有能够运行GEF的example,不然可能会好很多。我的毕设就是那种类似画流程图的软件,用GEF会有很大帮助吧?

还有我下载了官方GEF的例子,也解压缩到eclipse文件夹里了,可是“新建”-“示例” 的时候仍然看不到gef的例子,这个该怎么使用啊?麻烦你了~
  回复  引用    

#8楼  2005-03-24 09:55 Wudong [未注册用户]
新建一个以logic或者flow结尾的文件,在双击它就可以打开相应的编辑界面了。
  回复  引用    

#9楼  2005-05-05 00:22 chauncey [未注册用户]
Need to import org.eclipse.ui.ide
to have the example to compile under 3.0.1
  回复  引用    

#10楼  2005-05-05 00:30 chauncey [未注册用户]
Can't see the example from wizard:

Try delete the "configuration" folder under %Ecilpse_Home% and relaunch Eclipse.
  回复  引用    

#11楼  2005-05-07 17:48 whatisnew [未注册用户]
楼主原来是IBM的呀
  回复  引用    

#12楼 [楼主] 2005-05-07 22:39 八进制      
呵呵,不是。
  回复  引用  查看    

gef的文章现在确实太少!感谢!
  回复  引用    

感谢楼主!我刚刚开始GEF和EMF的学习,楼主的文章应该会有很大帮助。
  回复  引用    

#15楼  2005-08-18 21:55 小华 [未注册用户]
“修改一下DiagramCreationWizard这个类finish()方法里page.openEditor(newFile);这句改为page.openEditor(new FileEditorInput(newFile),"com.jtauber.river.editor");,”
后提示:FileEditorInput cannot be resolved to a type

这是不是那个包没有import?
谢谢
  回复  引用    

#16楼 [楼主] 2005-08-19 09:42 八进制      
可能是没有import这个插件:org.eclipse.ui.ide
  回复  引用  查看    

#17楼  2005-08-19 10:26 小华 [未注册用户]
呵呵,谢谢先,加过之后还是没有找到,

FileEditorInput是在(org.eclipse.ui.part.FileEditorInput),这个包在plugin-dependencies里面已经可以看到了,但是不明白为什么会找不到呢?郁闷

  回复  引用    

#18楼  2005-08-19 10:36 小华 [未注册用户]
但在包plugin-dependencies的org.eclipse.ui.part中没有找到FileEditorInput。class,奇怪啊
  回复  引用    

#19楼  2005-08-19 10:40 小华 [未注册用户]
在org.eclipse.ui.ide 理找到这个包了,谢谢
  回复  引用    

#20楼  2005-10-23 15:25 zhu [未注册用户]
问一个问题,如果再plugin.xml图形编辑界面商增加一个extensions, 则会自动再Plug-in Dependencies里面增加相应的包引用。 但是没有gef的, 这个要如何做?

用手工么? 这样会不会引起其他的问题?
  回复  引用    

#21楼 [楼主] 2005-10-24 21:45 八进制      
哪个extension会依赖gef呢?手工加org.eclipse.gef,没问题。
  回复  引用  查看    

#22楼  2005-11-08 10:26 loveofgod [未注册用户]
已经没有提示错误了
问一个笨问题:怎么运行这几个程序?
似乎没有main()啊
  回复  引用    

#23楼 [楼主] 2005-11-08 10:44 八进制      
Run里增加一个Eclipse Application。可以先看看Eclipse的帮助,Plug-in开发的那部分。
  回复  引用  查看    

#24楼  2005-11-11 16:25 loveofgod [未注册用户]
你好,按你说的我看了一下Eclipse的帮助Plug-in的部分,
我也按照他的示例做了一个"Hello,world"的插件,运行也成功了
但是我运行上面的例子没见Eclipse上有什么反映啊?比如说出什么图标之类的
我以为是我做的"hello,world"跟它有什么冲突,删掉后结果照旧,
望赐教。
  回复  引用    

#25楼 [楼主] 2005-11-11 20:26 八进制      
观察plugin.xml的extensions部分就能看出来了,对所有插件都是如此。
  回复  引用  查看    

#26楼  2005-11-14 08:29 loveofgod [未注册用户]
哦,原来plug-in例子“hello,world”的挂载点是
org.eclipse.ui.actionSets所以会在那一行图标里显示出来
而上面的例子的挂载点是
org.eclipse.ui.newWizards所以,应该在File->new里面找
谢谢
  回复  引用    

#27楼  2005-11-14 10:44 路 [未注册用户]
请教一个问题: 如果我用GEF绘制了一个图形文件,那么我可不可以把该图形文件,用WEB的方式给客户端展示,如果可以,我应该怎么办?非常感谢!!!
  回复  引用    

#28楼 [楼主] 2005-11-14 13:24 八进制      
可以,我从新闻组里找到这个代码片断,供你参考:
/**
* Returns the bytes of an encoded image for the specified
* IFigure in the specified format.
*
* @param figure the Figure to create an image for.
* @param format one of SWT.IMAGE_BMP, SWT.IMAGE_BMP_RLE, SWT.IMAGE_GIF
* SWT.IMAGE_ICO, SWT.IMAGE_JPEG, or SWT.IMAGE_PNG
* @return the bytes of an encoded image for the specified Figure
*/
private byte[] createImage(IFigure figure, int format) {

Device device = getEditPartViewer().getControl().getDisplay();
Rectangle r = figure.getBounds();

ByteArrayOutputStream result = new ByteArrayOutputStream();

Image image = null;
GC gc = null;
Graphics g = null;
try {
image = new Image(device, r.width, r.height);
gc = new GC(image);
g = new SWTGraphics(gc);
g.translate(r.x * -1, r.y * -1);

figure.paint(g);

ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {image.getImageData()};
imageLoader.save(result, format);
} finally {
if (g != null) {
g.dispose();
}
if (gc != null) {
gc.dispose();
}
if (image != null) {
image.dispose();
}
}
return result.toByteArray();
}
  回复  引用  查看    

#29楼  2005-11-16 10:21 路 [未注册用户]
你好,再请教个问题,是关于eclipse的富客户端的,如果要把GEF绘好的图形文件比如test.gefpractice要在富客户端显示,请问怎么样读取这个文件,并显示出最终的图形?非常感谢你在百忙中给于解答.
  回复  引用    

#30楼  2005-12-08 10:58 yuhere [未注册用户]
写的很好,关注中
  回复  引用    

#31楼  2006-03-02 20:59 大智 [未注册用户]
我的GEM,EMF,VE包分别按照两种方法装过,都没能成功导入这些包!急死我了。。。。。更不用说啥建立啥VISUAL CLASS类了。。。。。怎么回事啊。。???
  回复  引用    

#32楼 [楼主] 2006-03-05 08:18 八进制      
大智:启动eclipse的时候加上-clean参数一般就可以解决这个问题,在eclipse的help->About下可以看到是否装上。
  回复  引用  查看    

#33楼  2006-03-24 10:07 aoqi [未注册用户]
请问figure 里有通过光标改变大小的设置么?我建立了一个节点,他有一个scrollpane构成,scrollpane里我增添了一些label。我又设定了figure的setprefered()函数,现在当label足够多时,会出现滚动条。但是其大小是不改变的,那么我如何通过光标来改变它的大小?
  回复  引用    

#34楼 [楼主] 2006-03-24 10:45 八进制      
如果希望figure的大小随子元素的多少变化,scrollpane似乎没有存在的必要。figure的大小由layoutmanager决定,我感觉你这种情况用flowlayoutmanager或toolbarlayoutmanager就可以实现。
  回复  引用  查看    

#35楼  2006-03-24 13:43 aoqi [未注册用户]
这么快就解答了,非常感谢。我想我没有表达清楚。 是实现节点的伸缩功能,刚开始我在view里是以一定大小展现的,当出现滚动条时,用户希望改变其大小。比如说把鼠标靠近边缘时,变成伸缩箭头,来实现节点的伸缩。(感觉越说越乱-_-!)
顺便问一下draw2d帮助文档在哪里找?谢谢!
  回复  引用    

#36楼  2006-03-24 13:55 aoqi [未注册用户]
问题多多,在请教一个。怎么画出这样一个连接线:端点是以一个水平线开始,一定长度后,就变成直线与另一个端点连接(这个端点也是有一段水平线)。当拖拽节点时,随着改变的是中间的那条直线,水平线的位置固定(比如说节点两条边的中间位置)。谢谢!

  回复  引用    

#37楼 [楼主] 2006-03-24 15:10 八进制      
你的diagrampart上安装的editpolicy是XYLayoutEditPolicy吗,XYLayoutEditPolicy缺省应该是允许改变子节点大小的(选中时显示八个handle),如果不是XYLayoutEditPolicy的子类可以覆盖下面这个方法:
protected EditPolicy createChildEditPolicy(EditPart child) {
return new ResizableEditPolicy();
}

Connection的那个问题我没做过,应该在YourConnectionPart的createFigure里做一些工作,具体的你研究一下PolylineConnection和RelativeBendpoint吧。不用bendpoint好像也可以实现,比如在anchor上做些文章……
  回复  引用  查看    

#38楼 [楼主] 2006-03-24 15:17 八进制      
Draw2d的帮助似乎只有eclipse帮助里那个,资料不是很多。再有就是有问题去新闻组问了。
  回复  引用  查看    

#39楼  2006-03-24 15:26 aoqi [未注册用户]
大人,您可真是神速啊。万分感谢。我其实是用rcp开发,其中有一个视图,要用来展现数据库的table,并进行编辑。我刚开始时,不知道有gef这东东(其实学eclipse不到两个月)。并且是帮师兄作的,所以直接用draw2d进行画图的。所以好多东西自己编写,好麻烦啊。能不能用rcp + gef一起开发?要是可以的话,有时间把程序移到gef里。

我刚才大致编写了一下,其中用到了你编写的一个ColumnLayout(GEF入门系列(五、浅谈布局)里),用来布局table(有一个tablename和一个scrollpane组成。).但是大小改变后按理说其节点里面的figure也跟着变化吧?但是为什么不是呢?


新闻组?什么东东啊?在哪里?我是一只菜鸟~~~~~~
  回复  引用    

#40楼  2006-03-24 21:52 aoqi [未注册用户]
你好!上面的问题不用回答了。我下午上网站上一顿搜,大致了解了一下。并且我下定决心要用gef了,呵呵。现在正在按你的流程学习呢。再次感谢!有问题我还会回来请教的,嘻嘻

  回复  引用    

#41楼  2006-04-12 20:46 snow365 [未注册用户]
八进制:您好!(名字好可爱-_-)
看了一天了,还是很郁闷~
紧急提问:)
我已经按照您说的,还有查到的资料做了以下工作:
1、GEF的插件下载并且放到plugins里面
2、按照帮助建立了hellworld插件,运行正常。
3、那个pt1,改了,执行。问题:看到New-〉others-〉River-〉River Model


问题:
1)到此为止,还是不明白,GEF是怎么个工作的。我以为安装了GEF插件,可以进入一个界面编辑器的样子,可是没有任何感觉。安装了GEF插价Eclipse应该有什么变化呢?
2)如果要使用GEF编程,第一步是什么?

谢谢,~
在线等待中。。。。


  回复  引用    

#42楼  2006-04-14 10:32 bobby111 [未注册用户]
我对你的景仰有如滔滔江水连绵不决,
又如黄河泛滥一发而不可收拾。
我正在做一个eclipse插件项目,要用到GEF,没头绪。难啊!!!!!
我的E_M是luo_bb@126.com
有机会交流交流
谢谢8哥
  回复  引用    

#43楼  2006-04-22 16:09 carol [未注册用户]
这里比较热门,打打广告,呵呵。

我把小日本的那套GEF教程给翻译了!

该教程主要翻译于下面的(日本)链接,但是我这里综合了从其他资料和我的想法。因为是初学者,并且我从没学过日语,所以有很多意思是猜出来的。我已经基本上做完所有例子了,基本上把源程序中Eclipse3.1版本中已废弃的函数改为Eclipse3.1版本中的程序。

我以后基本上最多一周更新1节。

感觉这个教程还是讲的比较清楚的。一步一步地做这套教程绝对能快速入门GEF。我将扩展更多的教程。

我写的教程是基于Eclipse 3.1+, RCP的。便于富客户端的用户重构。

大家有问题可以跟帖,欢迎校正、交流。希望大家给予鼓励。

原链接为:http://www13.plala.or.jp/observe/GEF

我的教程放在了我的Blog上:http://www.dudufamilytime.com/blog/

  回复  引用    

#44楼  2006-04-25 14:34 alvintest [未注册用户]
org.eclipse.ui.dialogs.WizardNewFileCreationPage这个类在eclispe的E:\eclipse-SDK-3.0-win32\eclipse\plugins\org.eclipse.ui.ide_3.0.0这个目录里
  回复  引用    

#45楼 [楼主] 2006-05-12 10:49 八进制      
To carol: 学gef的时候也看过这个教程,当然由于不懂日语所以没有什么收获,粗略的感觉它是比较适合入门的,谢谢。
  回复  引用  查看    

请问,楼主订阅的什么新闻组.关于GEF的.谢谢.solkiss@gmail.com
  回复  引用    

#47楼  2006-05-21 04:12 LeonDDD [未注册用户]
我运行了一下第一个例子,出来的是2个矩形方框,我查看了源代码,但却找不到是在哪儿生成了这2个矩形,谁能帮我解释一下吗,谢谢了!
  回复  引用    

#48楼 [楼主] 2006-05-21 17:29 八进制      
eclipsercp: news://news.eclipse.org/eclipse.tools.gef
LeonDDD: 一般是在XXXPart的createFigure()方法里。
  回复  引用  查看    

#49楼  2006-05-28 18:16 LeonDDD [未注册用户]
@八进制,我想知道的是初始化的问题,就是说如何让编辑区域内一开始就有一些图形,比如你的那个GefPractice的例子中如何在初始化时有2个Node和一个连接这2个Node的Connection,尤其是Connection怎么初始化,谢谢。

  回复  引用    

#50楼  2006-05-29 16:46 cwest [未注册用户]
请教!
我用的是eclipse3.1,现在想做一个插件,但不知道从何入手,eclipse中有pde,如果做插件还需要GEF么?还有什么Draw2D的?我想做一个插件,上面显示一些文本框,按钮,字什么的.然后在文本框里输入内容,提交调用一些功能类.请问大虾,我需要什么样的环境才能实现这样的功能呀?给点思路!
  回复  引用    

#51楼  2006-05-29 17:15 ww [未注册用户]
我想知道,为什么我下了代码运行不出来呢,运行的时候只出现eclipse的界面,谢谢.
  回复  引用    

#52楼  2006-06-01 13:30 流子 [未注册用户]
你好,八进制,我想请教一下,我想比如说有10个模块(module),各个模块是一个类,也是个线程,不知道能否通过GEF只是在绘图中通过把几个模块拖拉进编辑区,然后把各个模块用连线连起来,就能实现各个模块之间的通讯呢,我现在是写了一些inport,outport类把他们连起来的,不知道用GEF能不能代替inport,outport的功能呢?
  回复  引用    

#53楼 [楼主] 2006-06-05 17:02 八进制      
LeonDDD: 我想可以在新建向导结束的时候在空模型里建立你需要的元素。
cwest: 文本框、按钮这些不用draw2d,用swt就可以实现了,你可以先看eclipse的帮助。
ww: 运行时的Eclipse里应该多了一些新建向导。
流子: GEF关心的是模型的表示,至于你把模块连接以后要实现哪些功能要由你自己实现,不知道你是不是要生成一些代码?
  回复  引用  查看    

#54楼  2006-06-12 17:59 cwest [未注册用户]
你好, 八进制!
////////////////
# re: [Eclipse]GEF入门系列(序) 2006-06-05 17:02 八进制
LeonDDD: 我想可以在新建向导结束的时候在空模型里建立你需要的元素。
cwest: 文本框、按钮这些不用draw2d,用swt就可以实现了,你可以先看eclipse的帮助。
//////////////////
我现在已经做一个界面,且可以上页面输入数据,但输好后,我想点下一步,不知怎么才能点到我想进入的那一步呢,我用的是newWizard,自动就有next按钮,我怎么才能控制这个按?钮谢谢!
  回复  引用    

#55楼  2006-06-15 17:27 LeonDDD [未注册用户]
八进制,再向你请教一个问题,怎么样建立一个Node到自己本身,而不是到别的Node的连接呢?我想了好久,想不出什么好的办法来。
  回复  引用    

#56楼 [楼主] 2006-07-03 23:45 八进制      
参考这篇http://bjzhanghao.cnblogs.com/archive/2006/06/22/432553.html
  回复  引用  查看    

你好,我新手,基于eclipse3.2.1,引用了你的pt1代码,导入了一些包,源文件没有错误提示,只有一些警告,可是打plugin.xml,测试运行时,出现错误码提示框:

the application could not start....

查看日志提示为:
java.lang.RuntimeException: 在注册表中找不到应用程序“org.eclipse.ui.ide.workbench”。可用的应用程序有:<NONE>。
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:68)
……………………

有办法解决吗?
  回复  引用    

可以运行了,在 http://www.cnblogs.com/bjzhanghao/archive/2005/02/19/106000.aspx 中,有读者提出了解决问题办法,下面是原话引用:

“在Eclipse Application目录下新建了一个启动项目,在右边显示的:
1,Main页选择 Program to Run -> Run an application -> org.eclipse.ui.ide.workbench
2,在Plug-ins页面中选择Choose plug-ins and fragments to lauch from the list ,点击Deselect All按钮,在列表中选择启动的项目,然后点击 Add Required Plug-ins ”

谢谢 八进制 无私的贡献。。。。

  回复  引用    

请问一下,你的pt1及pt2等例子中,我看了一下,不明白,那些代码中,并没有定义透视图和视图以及界面布局之类的,这些工作在哪实现的?
  回复  引用    

#60楼 [楼主] 2006-12-12 13:55 八进制      
没有定义布局,使用缺省布局,或是上次退出时保存的布局。

  回复  引用  查看    

1. 我建了一个菜单,并定义了一Action类,通过它的 run 方法打开编辑器
如下:
public void run()
{
String path = openFileDialog();
if(path != null)
{
IEditorInput input = new AppEditorInput(new Path(path));
IWorkbenchPage page = window.getActivePage();
try
{
page.openEditor(input, AppEditor.ID,true);
}
catch(PartInitException ex)
{

}
}
}
执行run方法时,会弹出一个框,要求输入新建文件的文件名,可是我无论输入什么名称,打开的编辑器时上面显示名称总是和 plugin.xml 上定义的name名一样,有什么办法,让输入框中的文件名时,并与打开编辑器上显示的名称一样?
好像有一个setPartName()方法,但是不知道如何用,因为在action中,不知道如何获利当前打开编辑器的对象

2. 在editor中,我在保存文件时,测试doSave方法:
try
{
IFile file = ((IFileEditorInput) getEditorInput()).getFile();
System.out.println(file.getName());
}
catch (Exception e)
{
e.printStackTrace();
}

执行时,出现异常:

java.lang.ClassCastException: com.test.editor.DimEditorInput

是什么原因呢?
在doSave方法中,如何将模型信息保存下来呢?因为模型中包含了图元位置,连接线等信息,能提代供一下操作的方法吗或者是否有其中的例子.





  回复  引用    

#62楼 [楼主] 2006-12-15 16:22 八进制      
在editorpart的createPartControl()里setPartName();
第二个问题你要检查你给editor的AppEditorInput是否实现IFileEditorInput。
  回复  引用  查看    

给editor的AppEditorInput实现了IFileEditorInput接口
如下:
public class EditorInput implements IPathEditorInput,IFileEditorInput
{
private IPath path;
public EditorInput(IPath path)
{this.path=path;}

public IPath getPath()
{return path;}

public boolean exists()
{return path.toFile().exists();}

public ImageDescriptor getImageDescriptor()
{return null; }

public String getName()
{
String editorName = path.toFile().getName().toString()+".pro";
return editorName;
}

public IPersistableElement getPersistable()
{ return null;}

public String getToolTipText()
{return path.toFile().getName().toString()+".pro";
}

public Object getAdapter(Class adapter)
{return null;}

public int hashCode()
{return path.hashCode();}

public IFile getFile()
{return null;}

public IStorage getStorage() throws CoreException
{ return null;}

}

可是当我在editor中doSave方法时,异常如下:

java.lang.NullPointerException
at com.sinosoft.hngroup.ui.editor.AppEditor.doSave(AppEditor.java:127)

如何解决呢?
  回复  引用    

#64楼  2007-02-13 09:50 Roy [未注册用户]
Thank you very much for your help. Your articles are the best among all I have seen before.
  回复  引用    

#65楼  2007-04-28 16:11 杨一 [未注册用户]
写得很好!
我刚学GEF,希望前辈能多多指点,
我刚运行pt1这个例子,结果org.eclipse.ui.part.EditorPart找不到
不知哪里有下载,可不可以发给我 我的邮箱:yangyiustc@gmail.com
非常感谢!
  回复  引用    

#66楼  2007-04-28 16:21 杨一 [未注册用户]
哈哈 按照LZ的话改了一下 果然可以了
非常感谢 我把你的博客当IE的首页了:)
  回复  引用    

#67楼  2008-06-26 10:46 fengjinge [未注册用户]
我正需要学习GEF呢,希望你能多写些好文章
  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-09-23 16:10 编辑过


相关链接: