??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲?v无码国产在丝袜线观看,亚洲va中文字幕无码,一本色道久久88亚洲综合http://m.tkk7.com/JetGeng/category/5869.html我的Java天堂zh-cnSat, 15 May 2010 13:52:36 GMTSat, 15 May 2010 13:52:36 GMT60Osgi常见错误分析http://m.tkk7.com/JetGeng/archive/2010/05/14/321000.htmlJet GengJet GengFri, 14 May 2010 11:15:00 GMThttp://m.tkk7.com/JetGeng/archive/2010/05/14/321000.htmlhttp://m.tkk7.com/JetGeng/comments/321000.htmlhttp://m.tkk7.com/JetGeng/archive/2010/05/14/321000.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/321000.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/321000.html
文中提到的代?a title="castexception_src" href="http://m.tkk7.com /Files/JetGeng/castexception.zip">castexception_src
~译好了包括不同的版本org.gunn.castexception.supplier插g文g?a title="castexception_bin" href="http://m.tkk7.com/Files/JetGeng/castexception_bin.rar">castexception_bin

Jet Geng 2010-05-14 19:15 发表评论
]]>
Galileo: EMF-Databinding ?Part 1--creation of the domain-modelhttp://m.tkk7.com/JetGeng/archive/2009/11/07/301576.htmlJet GengJet GengSat, 07 Nov 2009 14:41:00 GMThttp://m.tkk7.com/JetGeng/archive/2009/11/07/301576.htmlhttp://m.tkk7.com/JetGeng/comments/301576.htmlhttp://m.tkk7.com/JetGeng/archive/2009/11/07/301576.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/301576.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/301576.html

在我们创建领域模型前Q我们有必要了解一下我们的模型用来表达什么内宏V?所以我先解释一下在q个pd文章中要实现应用?假设Eclipsel织邀请你~写一个让他们理贡献者和目的应用程序?

我们需要创Z个模型来表达客户提供的信息。他们有可能如下图?

让我们进一步的看看q个模型?

Fundation

fundation是这个模型的根,他拥有两个列表属性?

projects: 像EMF,Techonlogy,Platformq样的顶U项目?
persons: 参加一个或多个目的h?
Project

Eclipse目拥有很多属性,比如目开始和l束旉、项目的主页的url{等。下面列出我们最感兴的?

subprojects: 一个项目可以拥有多个子目。子目本n也可以拥有多个子目?
parent: 目有一个父Ԍ除了目外)。这意味着目和子目Qproject-subprojectQ的关系是一个双向的关系?
projectleads 一个项目有多个目领导人?
committers 一个项目可以拥有多个A献者?
CommitterShip

当一个用hZ个项目的贡献者(CommitterQ时Q这徏立了一个committership。他拥有一个开始时间和l束旉。另外我们还要记录下下面的属性?

project: 和committership相关的项目。项目和committership是一个双向的关系?
person: 参加目的h?
Person

贡献者或目领导人的信息。我们关pȝ信息如下Q?

committerships: 用于保存和h相关的所有的committerships.q说明h和committership是一个双向关pR?

下面q张cdl出了关于上面模型的全貌?

正如你所看到的,我把许多关系设成了双向关pR?As you noticed I modeled many of the relations as bidirectional relations. q个q不是严D求所有地斚w要这P因ؓ有的地方可以通过eComtainer来获取他的父二Ӏ就像project-subproject一栗? 但是包含关系Qcontainment relationshipQ在使用databinding的情况下׃太合适了。因Z子到父亲时没有对应featureQ只能通过调用eContainer()Ҏ来获得? EMF提供了一个编辑器来创Z的Ecore-Modelq把它保存成XMI格式。我们可以用它来创徏试数据。下囑ְ是一个例子?/p>



Jet Geng 2009-11-07 22:41 发表评论
]]>
Birt初次体验——资料攉http://m.tkk7.com/JetGeng/archive/2008/04/04/190751.htmlJet GengJet GengFri, 04 Apr 2008 02:01:00 GMThttp://m.tkk7.com/JetGeng/archive/2008/04/04/190751.htmlhttp://m.tkk7.com/JetGeng/comments/190751.htmlhttp://m.tkk7.com/JetGeng/archive/2008/04/04/190751.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/190751.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/190751.html       Birtq个目开始已l很久了。先前一直没有用表报的需求,所以也没有对q个目做太多的x。就在前一D|间突然有了这一斚w的需求,所以就开始在|上疯狂的Google和Birt相关的信息。因个项目开始时间挺长了Q而且来成熟。所以和他相关的资料挺多。efa在他的?a href="http://m.tkk7.com/davidxu/articles/6784.html">[JAVA - BIRT]Birt 学习资料》已l给Z很多内容?/p>

      除了q些内容外我q找C三本书:

  1. ?BIRT: A Field Guide to Reporting ?/strong>
  2. ?strong>Integrating and Extending BIRT?/strong>
  3. ?a >Packt.Publishing.Practical.Data.Analysis.and.Reporting.with.BIRT?/strong>

     W一本和W二本是在是Z Birt 2.1?/p>

      W三本书是基于Birt 2.2

    有了q些东西基本可以上路了。但是我又一惻I如果有点例子更好了。例子肯定是有的。官方就有,q等什么呢q不赶紧L?/p>

 

birt

到里面随便找吧。肯定有你合适的?/p>

下面要做的事情就是分析好你的需求,好好用birt来表C的内容了?/p>

Jet Geng 2008-04-04 10:01 发表评论
]]>
WTP中常见问题解{?/title><link>http://m.tkk7.com/JetGeng/archive/2007/10/15/152982.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 15 Oct 2007 06:26:00 GMT</pubDate><guid>http://m.tkk7.com/JetGeng/archive/2007/10/15/152982.html</guid><wfw:comment>http://m.tkk7.com/JetGeng/comments/152982.html</wfw:comment><comments>http://m.tkk7.com/JetGeng/archive/2007/10/15/152982.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/JetGeng/comments/commentRss/152982.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/JetGeng/services/trackbacks/152982.html</trackback:ping><description><![CDATA[<p style="margin-bottom: 0cm;">问题一Q?/p> <p style="margin-bottom: 0cm;">问:目图标报错Q?font face="Times New Roman, serif">Problems </font>试图有一条错误显C?#8220;<font face="Times New Roman, serif">Java compiler level does not match the version of the installed Java project facet.”</font>?/p> <p style="margin-bottom: 0cm;">{:q个是因?font face="Times New Roman, serif">Facted Project</font>中的<font face="Times New Roman, serif">Java</font>版本讑֮与项目的<font face="Times New Roman, serif">Java</font>版本讑֮不一致?/p> <p style="margin-bottom: 0cm;"><img src="http://m.tkk7.com/images/blogjava_net/jetgeng/Eclipse/project_factes.jpg" alt="" border="0" /></p> <p style="margin-bottom: 0cm;">?font face="Times New Roman, serif">Drawing </font>Q? Modify<font face="Times New Roman, serif">: Modify Faceted Project</font>中所C,q个时候项目的<font face="Times New Roman, serif">Java</font>的版本ؓ<font face="Times New Roman, serif">5.0</font>。如果项目的<font face="Times New Roman, serif">Java Compiler</font>的设|如<font face="Times New Roman, serif">Drawing </font>Q? Java C<font face="Times New Roman, serif">: Java Compiler</font>中所C的讄。就是会出现问题中所q的错误。修改的方式很简单,只要l一一下他们的讄。让他们保持一致就<font face="Times New Roman, serif">OK</font>了?/p> <p style="margin-bottom: 0cm;"><img src="http://m.tkk7.com/images/blogjava_net/jetgeng/Eclipse/Java_Compiler.jpg" alt="" border="0" /><br /> </p> <img src ="http://m.tkk7.com/JetGeng/aggbug/152982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/JetGeng/" target="_blank">Jet Geng</a> 2007-10-15 14:26 <a href="http://m.tkk7.com/JetGeng/archive/2007/10/15/152982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用DTP旉C个很奇怪的问题http://m.tkk7.com/JetGeng/archive/2007/06/22/125832.htmlJet GengJet GengFri, 22 Jun 2007 06:39:00 GMThttp://m.tkk7.com/JetGeng/archive/2007/06/22/125832.htmlhttp://m.tkk7.com/JetGeng/comments/125832.htmlhttp://m.tkk7.com/JetGeng/archive/2007/06/22/125832.html#Feedback2http://m.tkk7.com/JetGeng/comments/commentRss/125832.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/125832.html使用DTP旉C个很奇怪的问题?br>
我所使用?/span>DTP的版本是dtp-sdk_1.0_200612211。我通过Data Source Explorer来浏览数据库是发现有的字D늚cd不能正确昄?br>

q个数据库是Mysql 5.0.

q个数据表在Navicat中的设计视图如下图?/p>

q种问题不光出现在mysql数据库中Q在oracle 10g的数据库中我也发CcM的情c?/p>

发现他不能正常的昄Clob和Blobq两U类型?/p>



在Sql plus中这个表的描qCؓQ?br>

知道怎么回事的兄弟们Q帮忙告诉我一声。先谢谢了?br>


Jet Geng 2007-06-22 14:39 发表评论
]]>
看到了Eclipse AspectJhttp://m.tkk7.com/JetGeng/archive/2007/03/06/102163.htmlJet GengJet GengTue, 06 Mar 2007 06:48:00 GMThttp://m.tkk7.com/JetGeng/archive/2007/03/06/102163.htmlhttp://m.tkk7.com/JetGeng/comments/102163.htmlhttp://m.tkk7.com/JetGeng/archive/2007/03/06/102163.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/102163.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/102163.html

Jet Geng 2007-03-06 14:48 发表评论
]]>
关于GEF中的Connectionhttp://m.tkk7.com/JetGeng/archive/2007/01/08/92407.htmlJet GengJet GengMon, 08 Jan 2007 09:09:00 GMThttp://m.tkk7.com/JetGeng/archive/2007/01/08/92407.htmlhttp://m.tkk7.com/JetGeng/comments/92407.htmlhttp://m.tkk7.com/JetGeng/archive/2007/01/08/92407.html#Feedback1http://m.tkk7.com/JetGeng/comments/commentRss/92407.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/92407.html?/font>gef目中连U一直扮演这个不可或~的角色。碰巧前D|间有个机会好好的看了q个部分的内宏V下面就把我的一点点认识和大家分享?/font>

首先要在模型上支持,能够保存q接的信息。对于不同的目有不同的要求。我们通过两个例子可以看一Ҏ?/font>

1?/font>http://www13.plala.or.jp/observe/GEF/CZ中的GEF6.zip Q下面称q个例子?/font>HelloWoldQ?/font>

q行的结果入下图所C:

hellwoui.jpg

它的模型可以使用如下的类图来表示Q?/font>

LineConnectionModel-i.jpg

用来描述Connection的分别是LineConnectionModel?/font>ArrowConnectionModelq两个类。这两个cȝ父类和图形模型(HellowModelQ相兟?/font>

2?/font>IBMU皮书中?/font>GEF范例(下面U这个例子ؓworkflow)

q行效果如下图:

gefrun.jpg

他的模型可用下面的类图描qͼ

gefredbook.jpg

其实q接的模型应该很单,他只要能保存他的两端的对象就好了。图形模型(?/font>HelloWold中的HelloModelQ能够保持与他相兌的连接(HelloWold中的LineConnectionModel?/font>ArrowConnectionModelQ?/font>

看完?/font>ModelQ我们下面就可以看看EditPart部分了?/font>

要看EditPart当然是要看最关键的了。也是和连接直接关联的EditPart了。分别察看了和连接相关的EditPartQ发C们都会实C个叫org.eclipse.gef.NodeEditPart的接口。如下图所C:

ShapeEditPart-a.jpg

?/font>nodeEditPart中有四个Ҏ需要实现。通过q个四个Ҏ的名字就可以看出他们?/font>Anchor2密切相关。下面就来看看这几个Ҏ的具体功能:

ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection);

当需要画q接的时候,通过q个Ҏ获取q接的源锚点。不这个锚点在什么位|,他取得以后直接就用它作ؓ源点了?/font>

ConnectionAnchor getSourceConnectionAnchor(Request request);

当在准备创徏q接的时候,通过Request来获取新q接的源锚点?/font>

另外的两个就不再啰嗦了。是Z获得目标的锚炏V?/font>


但是我们肯定看到?/font>HelloWold?/font>Workflow中的q接有点不一栗?/font>HelloWold中直接是囑օ上的Q?/font>workflow是通过q接基本囑օ上面的一个子囑օ而连接的。简单来说就是他们连接的anchor有点不一Pq样׃出现执行l果的不同?/font>

下面来看看他们到底是怎么实现的。根据上面提到的。锚点的获取是通过getSourceConnectionAnchor?/font>getTargetConnectionAnchorҎ来获取的。我们只需要好好比对一下他们这几个Ҏ的不同就可以了?/font>

HelloWold中的getSourceConnectionAnchor

public ConnectionAnchor getSourceConnectionAnchor(Request request) {

returnnew ChopboxAnchor(getFigure());

}

q里q单的创徏一? ChopboxAnchor 好了。这个就可以直接q到?/span>Figure上了?/span>

?/font>workflow中这个情늨微有一点复杂了。先不说Q还是看看他? getSourceConnectionAnchor 是怎么实现的?/font>

public ConnectionAnchor getSourceConnectionAnchor(

ConnectionEditPart connection) {

Connection edge = (Connection) connection.getModel();

return getNodeFigure().getConnectionAnchor(edge.getSource().getName());

}


/**

*returnsananchorgivenitsname

*

*@paramportNamenameoftheanchor

*@returntheanchorwiththename<code>portName</code>

*/

public ConnectionAnchor getConnectionAnchor(String portName) {

return (ConnectionAnchor)connectionAnchors.get( portName );

}


protected Hashtable connectionAnchors = new Hashtable(7);


/**

*Addaninputportanditsanchor

*

*@paramportName

*uniquenametorefertotheport

*/

publicvoid addInput(String portName) {

InputPortFigure inputPort = new InputPortFigure();

add(inputPort);


PortConnectionAnchor anchor = new PortConnectionAnchor(inputPort);

getTargetConnectionAnchors().add(anchor);

connectionAnchors.put(portName, anchor);

}


通过q几个方法可以看出它是在dInput时候就创徏好了一个和PortFigure 相关Anchorq把它保存v来。在要用的时候就把它取出来。这样就搞定了?/font>

具体的可以参考这两个例子的代码。好了,打完收工?/font>


参考文?/font>

IBM U皮?/font>

1?/span>荒野困兽(老脸归来)’blog

2?/span>GEF q阶Q第一部分: Anchor




Jet Geng 2007-01-08 17:09 发表评论
]]>
DragSourceEvent 中的坐标问题http://m.tkk7.com/JetGeng/archive/2007/01/05/92104.htmlJet GengJet GengFri, 05 Jan 2007 12:32:00 GMThttp://m.tkk7.com/JetGeng/archive/2007/01/05/92104.htmlhttp://m.tkk7.com/JetGeng/comments/92104.htmlhttp://m.tkk7.com/JetGeng/archive/2007/01/05/92104.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/92104.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/92104.html我想在我?/span>EditPartViewer中获取一个图形元素把它拖攑ֈ一?/span>swt控g中。实现在<<囑Ş~辑器中拖拽对象?/font>swt控g>>一文有提到了。不q我在处理的时候,q不是按照他的那个方式来做的。我是根据当前点Q?/span>DragSourceEventQ?/span>的位|来查找该点下的对象。看是否是我需要的对象Q如果是允许拖动。否则就不可以?/span>

问题在这里出来:当没有出现滚动条的时候一切都很正常,当一出现滚动条就L没有办法拖动了。最后才发现DragSourceEvent中的坐标是按照屏q来得,?/span>EditPartViewer 中的坐标是按照他的那?/span>viewer来得。这个地斚w要{换一下?/span>



q个转换的动作发现在jfireQ?/span>org.nightlabs.editor2d.util.EditorUtil https://svn.jfire.org/svn/main/trunk/org.nightlabs.editor2d/src/org/nightlabs/editor2d/util/EditorUtil.javaQ中有现成的。不多说了,拿来用吧?/p>

Jet Geng 2007-01-05 20:32 发表评论
]]>
在eclipse中通过~程的方式调用Ant脚本http://m.tkk7.com/JetGeng/archive/2006/12/30/91026.htmlJet GengJet GengSat, 30 Dec 2006 08:13:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/12/30/91026.htmlhttp://m.tkk7.com/JetGeng/comments/91026.htmlhttp://m.tkk7.com/JetGeng/archive/2006/12/30/91026.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/91026.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/91026.htmlq来看了?font face="Times New Roman, serif">Ant的东西,?font face="Times New Roman, serif">Ant
真的很强。在使用的过E中发现Q开发项目的q程中用到?font face="Times New Roman, serif">Ant
其实q不多,只是有时候只是需要换一下其中的个别参数可以重新用了。如果把q些重复的情况,写成不同?font face="Times New Roman, serif">build.xml
的模ѝ定制成不同的Q务,通过快捷键来调出Q最后自动的执行ant脚本。呵呵,x是一个很不错的主意?/p>

说干干了。定义一?font face="Times New Roman, serif">ActionQ和快捷键帮定就不多说了。生?font face="Times New Roman, serif">build.xml通过你自己喜Ƣ的代码生成技术(个h喜欢?font face="Times New Roman, serif">JET4Q定义模板ƈ生成代码?/p>

下面在自动执?/span>Ant脚本的时候卡了一会壳。看到?/span>以编E方式调?Apache Ant

?/span>2 觉得问题已经解决了。不q这U方式是?/span>Eclipse q行?/span>VM中执行,也就是说会把Eclipse 挂住。我希望辑ֈ的效果是?/span>org.eclipse.ant.ui插g辑ֈ的效果一栗最好是去调用他了。他是在eclipse默认集成的,直接依赖于他不会有什么问题。看了他plugin.xml发现了一个好东西?/span>org.eclipse.debug.core.launchConfigurationTypes?/font>Q所以我想我创Z?/span>ILaunchConfigurationType 用它来实实例化一?/font>ILaunchConfigurationWorkingCopy是不是就可以搞定?/font>。上|?/font>google了一下有个兄弟写完了q个部分的工?/font>1。把他的代码攑ֈ一个插仉面简单的跑了一下,果然可行。爽Q?br />
 

参考文档:


  1. Eclipse 3.1 Update to “How to run ANT files programmatically?/font>

  2. 以编E方式调?Apache AntQ?/span>http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_gawor/0502_gawor.htmlQ?/span>

  3. 代码范例http://dev.eclipse.org/mhonarc/lists/platform-ant-dev/msg01053.html

  4. http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html



Jet Geng 2006-12-30 16:13 发表评论
]]>在eclipse中获得当前活动的workbenchwindowhttp://m.tkk7.com/JetGeng/archive/2006/12/04/85363.htmlJet GengJet GengMon, 04 Dec 2006 07:01:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/12/04/85363.htmlhttp://m.tkk7.com/JetGeng/comments/85363.htmlhttp://m.tkk7.com/JetGeng/archive/2006/12/04/85363.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/85363.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/85363.html大家肯定都知道在Eclipse中获得当前活动的workbenchWindow可以采用如下的方式来完成?/p>

PlatformUI.getWorkbench().getActiveWorkbenchWindow()

?/p>

Q?/span>?font face="Times New Roman, serif">PlugincMQ? getDefault().getWorkbench().getActiveWorkbenchWindow() 。一般情况下q两个方?span lang="zh-CN">?/span>能够很好的工作。但是突然有一天发C不能工作了。郁h都不行了。察看了一下变?span lang="zh-CN">Q?span lang="zh-CN">如下?/span>Q?/span>?img src="http://m.tkk7.com/images/blogjava_net/jetgeng/Eclipse/display.jpg" alt="display.jpg" border="0" height="291" width="752" />

q个activatedWindow明明有啊Q怎么取不到呢?/p>

打开代码一看,看到 org.eclipse.ui.internal.Workbench cM?/span> getActiveWorkbenchWindow Ҏ?/span>

public  IWorkbenchWindow getActiveWorkbenchWindow() {
        
//  Return null if called from a non-UI thread.
        
//  This is not spec'ed behaviour and is misleading, however this is how
        
//  it
        
//  worked in 2.1 and we cannot change it now.
        
//  For more details, see [Bug 57384] [RCP] Main window not active on
        
//  startup
         if  (Display.getCurrent()  ==   null ) {
            
return   null ;
        }

        
//  Look at the current shell and up its parent
        
//  hierarchy for a workbench window.
        Control shell  =  display.getActiveShell();
        
while  (shell  !=   null ) {
            Object data 
=  shell.getData();
            
if  (data  instanceof  IWorkbenchWindow) {
                
return  (IWorkbenchWindow) data;
            }
            shell 
=  shell.getParent();
        }

        
//  Look for the window that was last known being
        
//  the active one
        WorkbenchWindow win  =  getActivatedWindow();
        
if  (win  !=   null ) {
            
return  win;
        }

        
//  Look at all the shells and pick the first one
        
//  that is a workbench window.
        Shell shells[]  =  display.getShells();
        
for  ( int  i  =   0 ; i  <  shells.length; i ++ ) {
            Object data 
=  shells[i].getData();
            
if  (data  instanceof  IWorkbenchWindow) {
                
return  (IWorkbenchWindow) data;
            }
        }

        
//  Can't find anything!
         return   null ;
    }

E序跑到 Display.getCurrent() q一l句q我掉铑֭Q返回了一?/font> null Q。就是他Q就是他了!到网?/font> google 了一下。看看在什么状况下他会q回一?/font> null. ?/font> http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F 扑ֈ了?/font>

他说Q?/font> Display 永远和创Z的线E联pd一Pq且一个线E拥有一个活动的 Display 。在创立 Display 的线E中可可以通过 Display.getCurrent() 获得当前zd?/font> Display 。如果出了这个线E就看不到这?/font> Display 了。如果有的线E不拥有 Display Q那它的 Display.getCurrent() 只能得?/font> null 了?/font>

回头看了一下我的代码,我是在新建的U程中启动了调用了这个方法。难怪他不给面子呢!


参考文献:

http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F

http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Display.html



Jet Geng 2006-12-04 15:01 发表评论
]]>初次接触Oclhttp://m.tkk7.com/JetGeng/archive/2006/11/11/80607.htmlJet GengJet GengSat, 11 Nov 2006 12:30:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/11/11/80607.htmlhttp://m.tkk7.com/JetGeng/comments/80607.htmlhttp://m.tkk7.com/JetGeng/archive/2006/11/11/80607.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/80607.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/80607.html以前不知道有Oclq个东西Q前几天有幸看到。深p他吸引了。抛开其他的不_׃的查询功能的p人激动不已了:)?/p>

现在只是看了

oclQueryExmaple

Querying EMF Models with OCL


在项目中单的使用了一下他作ؓ查询的工兗感觉他真的很不错,在下一D|间将会重点去了解他?/p>

Jet Geng 2006-11-11 20:30 发表评论
]]>
囑Ş~辑器中拖拽对象到swt控ghttp://m.tkk7.com/JetGeng/archive/2006/11/11/80604.htmlJet GengJet GengSat, 11 Nov 2006 11:56:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/11/11/80604.htmlhttp://m.tkk7.com/JetGeng/comments/80604.htmlhttp://m.tkk7.com/JetGeng/archive/2006/11/11/80604.html#Feedback1http://m.tkk7.com/JetGeng/comments/commentRss/80604.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/80604.html前面一D|间有一个需求就是从swt控g中拖拽对象到囑Ş~辑器中Q就?/span>class org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor 的儿子们Q编辑器?/span>

后来?span lang="zh-CN">惛_?/span>我需要从囑Ş~辑器中拖拽对象?/span>swt控g中又该怎么做?br />l过一D|间的探烦Q终于搞定了?/span>

C如下q程Q希望对需要的朋友有点帮助?/p>

首先有了《从SWT控g中托拽对象到GEF~辑器中》文中对addDropTargetListenerҎ使用的经历,很快q定我需要对GraphicalViewerd一?/span>DragSourceListener?/span>

想着到这个地Ҏ应该可以很快收工了。但是添加完了以后发?span lang="zh-CN">原来的拖动功能都没有?/span>Q这个怎么回事。谁在后面搞鬹{?/font>

l过一D|间的狂搜滥烦l于扑ֈ了问题的关键。因?font face="Times New Roman, serif">GEF不允许同时有两个zd DragSource ?/p>

它本w已l拥有一?font face="Times New Roman, serif">DragSource了(~辑器内部的托拽Q,我们q时候添加一个就会存在多

DragSource了。当我添加一个新?font face="Times New Roman, serif">DragSource时候我们新家的DragSource׃被认为是默认?font face="Times New Roman, serif">DragSource?/p>

他以前的DragSource失效了。这不是我像看到的?/p>

怎么处理。看C一个牛人的解决Ҏ?/p>


What I made to fix the problem was to only allow my DragSource to act under certain 
conditions (in my application this happens when you click and drag the mouse AND
 the SHIFT key is pressed). So when the SHIFT key is not pressed my DragSource does
nothing and the editor's internal drag and drop works fine?br />
public void dragStart(DragSourceEvent event)
{
...

if (!condition.isValid())
event.doit = false;

...
}

我尝试了一下这U状况,一下就搞定了?/span>
在我的项目中Q由于还有一些数据需要{化?font size="2">呵呵Q感觉不错?br />
参考文档:
http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15754.html


Jet Geng 2006-11-11 19:56 发表评论
]]>从SWT控g中托拽对象到GEF~辑器中http://m.tkk7.com/JetGeng/archive/2006/09/12/69195.htmlJet GengJet GengTue, 12 Sep 2006 09:16:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/09/12/69195.htmlhttp://m.tkk7.com/JetGeng/comments/69195.htmlhttp://m.tkk7.com/JetGeng/archive/2006/09/12/69195.html#Feedback7http://m.tkk7.com/JetGeng/comments/commentRss/69195.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/69195.html?font face="Times New Roman, serif">SWT
控g中托拽对象到GEF~辑器中

一般情况下GEFE序都是采用如下的界面:


gef.jpg

新徏对象的操作时通过拖拽Palette中元素到~辑而获得。但是有时候可能需要从SWTQ操作系l拖一些元素到GEF~辑器中来?/p>

下面我就把创L拖拽q程大概的描qC下:

1、定义拖拽源Q?font face="Times New Roman, serif">DragSourceQ?/p>

2、定义拖拽目标的监听Q?font face="Times New Roman, serif">DropTargetQ?/p>

到这里对于一般的拖拽其实是可以完工了?/p>

q个部分可以参?font face="Times New Roman, serif">weidagang2046的专栏的?/a>DND入门学习?/a>

但是要能?font face="Times New Roman, serif">GraphicalViewerq个对象扮演?/font>DropTarget我们q需要做点其他的工作?/font>GraphicalViewerq个cLw提供了一?/font>addDropTargetListenerҎ。看到这个方法是不是一늋喜啊。如果有也是应该的,因ؓq个Ҏ是我们解决前面提出问题的关键?/font>

好了看看他的声明吧!

				
						
								public void addDropTargetListener(TransferDropTargetListener listener)
						
				
		

他这个参数居然不?/font> DropTargetListener 。这?/font> TransferDropTargetListener 是一个什么玩意啊Q?/font>

?/font> help 中查刎ͼ

public interface TransferDropTargetListener
extends TransferDropTargetListener

A DropTragetListener that handles one type of SWT Transfer. The purpose of a TransferDropTargetListener is to:

  • Determine enablement for a Drop operation. Enablement is often a function drop location, and/or criteria.

  • When enabled, optionally showing feedback on the DropTarget.

  • Performing the actualy Drop

DelegatingDropAdapter allows these functions to be implemented separately for unrelated types of Drags. DelegatingDropAdapter then combines the function of each TransferDropTargetListener, while allowing them to be implemented as if they were the only DragSourceListener.

偷下懒,׃译了?/font>

创徏如下cL实现q个接口Q?/font>

public class TreeNodeTransferDropTargetListener extends

AbstractTransferDropTargetListener {


public TreeNodeTransferDropTargetListener(EditPartViewer editPartViewer) {

// 改类默认是处? TextTransfer cd的拖拽事?/font>

super (editPartViewer,TextTransfer.getInstance());

// TODO Auto-generated constructor stub

}


@Override

protected void updateTargetRequest() {

}


}

我们q个拖拽x让他执行一?/font> create 命o。所以下面就是要重蝲他的 createTargetRequest() 用来处理 create 对象的请求( CreateRequestion Q?/font> CreateRequetion 需要用到一个类Q帮助我们创建对象的工厂cR?/font> GEF l了我们q样的一个接?/font> CreationFactory 。下面我们取实现他就好了?/p>


package org.eclipse.gef.examples.shapes.rcp.views;


import org.eclipse.gef.examples.shapes.model.EllipticalShape;

import org.eclipse.gef.requests.CreationFactory;


public class TypeCreationFactory implements CreationFactory {


public Object getNewObject() {

// TODO Auto-generated method stub

EllipticalShape label = new EllipticalShape();

return label;

}


public Object getObjectType() {

return EllipticalShape. class ;

}


}


注意Q这里的 getNewObject 是返回要创徏cȝ一个对象实例?/font> GetObjectType 需要返回需要创建对象的cR这个可不要搞反了?/font>

q样我们可以把我们? TreeNodeTransferDropTargetListener cM?/font> createTargetRequest Ҏ加上了?/font>


private TypeCreationFactory factory = new TypeCreationFactory();

protected Request createTargetRequest() {

CreateRequest request = new CreateRequest();

request.setFactory( factory );

return request;

}


好了q个时候不要客气了Q加?/font>

protected void handleDragOver() {

getCurrentEvent(). detail = DND. DROP_MOVE |DND. DROP_COPY ;

super .handleDragOver();

}


@Override

protected void handleDrop() {

//String s = (String)getCurrentEvent().data;

//factory.setText(s);

super .handleDrop();

}

q样的方法吧?/font>

q样q个功能完成了?/font>


参考文献:

http://m.tkk7.com/weidagang2046/archive/2006/09/05/67707.html

http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html




Jet Geng 2006-09-12 17:16 发表评论
]]>Mylar ?-开源工作^台箋http://m.tkk7.com/JetGeng/archive/2006/07/11/57606.htmlJet GengJet GengTue, 11 Jul 2006 02:12:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/07/11/57606.htmlhttp://m.tkk7.com/JetGeng/comments/57606.htmlhttp://m.tkk7.com/JetGeng/archive/2006/07/11/57606.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/57606.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/57606.html

Mylar ?-开源工作^台箋

1.     引子

   很久很久以前有一个木匠,不但_心而且q健忘。虽然在每天工作开始前Q会考虑以下大概需要做的工作。但是在实施的过E中l常会出现这L状况。看有一天他需要下一?span lang="EN-US">1.2m 的料。这个木匠就甩着膀子过来了。在动手前肯定是要量一下得Q把手往口袋里一摸。卷是摸到Q摸C昨天晚上吃花生时留下得壳Q还I公P没有到处? 扔。)。放哪儿呢,攑֓儿呢……。经q了半个时Q终于在一个角落找C卷尺。那个兴奋啊。兴冲冲的跑到木料前Q愣了一下骂了一句“tmd锯子又不知道? 那去了!”。l去N子去了……?o:p>

       其实在我们的软g开发中也会cM的情景。我׃再啰嗦了?br />

1.      解决Ҏ

我要说的q个解决Ҏ是Eclipse + Mylar。Eclipse׃用多说了。但是Mylar却是不得不说?o:p>

Mylar 最大的亮点是让你只关注于你当前的工作QActive TaskQ。在整个工作Z只是昄和你工作相关的内宏V这样在Mylar中就有了一个核心的概念dQTaskQ。这个Q务我们完全可以对应到工作中的 一个Q务,如你的头l你分配得一个Q务、测试组的同仁提交的一个需要你修改得bug{等?o:p>

我们每天的工作应该由q些dl成?span lang="EN-US">

?/span> Mylar 中首先提供了一个对于Q务管理的功能。图 ?1 昄了一?/span> Mylar 的Q务管理页面。关于如何创Z?/span> Mylar 中的d可以参考官Ҏ供的一?/span> flash demo 我就不啰嗦了 Q?/span> http://www.eclipse.org/mylar/doc/demo/mylar-demo-04.html Q?/span> ?br /> Snap1.jpg
有了d后,可以把你的工作x到特定的d上了。这个部分在上面的提到的那个官方?/span> Flash 中也有描q。另外还有一个老外?/span> blog 也作了点说明?br /> http://weblogs.java.net/blog/kirillcool/archive/2005/11/mylar_a_very_us.html ?br /> 说到dQ?/span> Mylar 提供了两UQ务。一个是本地dq有一个就是知识库dQ这个我译的不好原文是 repository task Q。本CQ务很好理解就是Q务的数据是以文g的Ş式保存在本地的。一般情况下只有本h可以使用。知识库d是从 BugTrace pȝQ目前支?/span> Bugzilla ?/span> JIRA Q里面获?/span> Task. q样可以在一个团队中使用了。关于这个功能的使用可以参?/span> http://eclipse.org/mylar/doc/demo/mylar-demo-04-reports.html. 从个度来_我是最喜欢q个块的功能。想一惛_Q?/span> QA l的人测?/span> bug U录?/span> bug Trace pȝ中。开发h员可以在他自q开发环境中。l想Q项目管理h员把 Project 理软g中的 task ?/span> bug 的Ş式存放于 bugtrace pȝ中(其实q个时候的 BugTrace pȝ不光理的是 Bug 了,可以把它认ؓ识一个简单的目理Q?br /> 关于q个目的整体全局的介l可以参?/span> Q?/span> http://www.eclipsezone.com/articles/mylar/?source=archives

我想她肯定会有美好的未来的?br />



Jet Geng 2006-07-11 10:12 发表评论
]]>
关于Connection以及Routerhttp://m.tkk7.com/JetGeng/archive/2006/05/22/47548.htmlJet GengJet GengMon, 22 May 2006 14:21:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/05/22/47548.htmlhttp://m.tkk7.com/JetGeng/comments/47548.htmlhttp://m.tkk7.com/JetGeng/archive/2006/05/22/47548.html#Feedback2http://m.tkk7.com/JetGeng/comments/commentRss/47548.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/47548.html今天有幸到关于Connection以及Router使用的问题。觉得有Ҏ思就把它C下来。以背后查?/p>

看到一个例子中看到? -- 1所C的功能?/p>

?1.JPG

其中?font face="Times New Roman, serif">-1中的q线是自适应的会保持该线D|最短的Q其实他是用的ShortestPathConnectionRouterQ这个时候我q不知道,我是一个新手大家见W了Q。经q一番调查以后发现原来是?font face="Times New Roman, serif">EditPart中的refreshVisualsҎ中有如下代码?/p>

代码--1

if  (spRouter  ==   null ) {
            ConnectionLayer cLayer 
=  (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER);
            FanRouter router 
=   new  FanRouter();
            router.setSeparation(
30 );
            spRouter 
=   new  ShortestPathConnectionRouter(getFigure());
            router.setNextRouter(spRouter);
            cLayer.setConnectionRouter(router);
        }

当时q啊,他肯定是在给一个特定的Layer加上一个什么玩意。然后就通过q个玩意来完成对于\径的计算Q其实这些东西完全是从代码的字面意思而得到的Q。我q些东西加到我的代码中了。但是我q行的效果还是没有v作用。他依旧是以前的那幅得行。我抓,抓也没有用。就是达不到我要的效果?/p>

q试一下的x我打开了我?font face="Times New Roman, serif">ConnectionEditPart(是q线的那?font face="Times New Roman, serif">EditPart),发现?font face="Times New Roman, serif">createFigure中我是这么写的?/p>

代码 -- 2

PolylineConnection connection  =  (PolylineConnection) super .createFigure();
       
        connection.setConnectionRouter(
new  BendpointConnectionRouter(){
            
public   void  route(Connection conn) {
                GraphAnimation.recordInitialState(conn);
                
if  ( ! GraphAnimation.playbackState(conn))
                    
super .route(conn);
            }
        });

很明显我在这里给connection赋了一?font face="Times New Roman, serif">ConnectionRouter。最l其效果的是q一?font face="Times New Roman, serif">ConnectionRouter起作用了?/p>

Md刚掉他就万事大吉了?/p>

到这里代码部分其实就完了。但是他背后的还有一Ҏ事?/p>

q里有三个角Ԍ

1?font face="Times New Roman, serif">Connection

2?font face="Times New Roman, serif">ConnectionAnchor.

3 ?/span> ConnectionRouter

q个cL用来昄两点之间的线D?/span> (Line), 他的L和终Ҏ通过 ConnectionAnchor 来定义的。至于他的其他点是通过 ConnectionRouter 计算讄的。从q个地方来看 ConnectionRouter 是一个负责计的工具cR这样完全可以让所有的 Connection 使用一?/font> ConnectionRouter 实例Q这是今天最要记下的部分Q?/font>

?/font> gef 中他׃ؓ我们提供了这L机制。下面的q段话是 Gef help 中的一句话。他p明了q个道理?/font>

A convenient way to share the router with all connections and to place connections above the drawing is to use a ConnectionLayer. The layer has a connection router property which it shares with every child that's a connection. You can update this property and easily change every connection's router at once.

q个道理要{换成代码的话是代码 ? 1 了?/font>

q个东西很简单。希望对像我一L新手有点帮助?/font>



Jet Geng 2006-05-22 22:21 发表评论
]]>八进制推荐代码的功能分析http://m.tkk7.com/JetGeng/archive/2006/05/06/44718.htmlJet GengJet GengSat, 06 May 2006 02:34:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/05/06/44718.htmlhttp://m.tkk7.com/JetGeng/comments/44718.htmlhttp://m.tkk7.com/JetGeng/archive/2006/05/06/44718.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/44718.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/44718.html特别喜欢那个例子的一点一Ҏ加功能的做法?/p>

关于q个例子中用的原理八进制讲的很清楚了。我׃啰嗦了。我把自己读这部分代码的笔记记下来?/p>

GEF l习?jpeg



Jet Geng 2006-05-06 10:34 发表评论
]]>
Jmerge的用初??http://m.tkk7.com/JetGeng/archive/2006/05/02/44342.htmlJet GengJet GengTue, 02 May 2006 03:34:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/05/02/44342.htmlhttp://m.tkk7.com/JetGeng/comments/44342.htmlhttp://m.tkk7.com/JetGeng/archive/2006/05/02/44342.html#Feedback1http://m.tkk7.com/JetGeng/comments/commentRss/44342.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/44342.html Jmerger 使用初步 ( ?/font> )

前面一提C他基本的概念和能完成的功能。在q一里我们来看看他的用条件和使用Ҏ?/font>

使用条gQ应?/font>

org.eclipse.jdt.core Q提供基本的语法分析Q?/font>

org.eclipse.core.runtime Q提供基本的 URI {)

org.eclipse.ui Q提供进度条Q我qCq个。其他可能还有)?/font>

看到他要使用q么?/font> Eclipse 的东ѝ我d的打消了?/font> Eclipse 外用他的打(如果谁有好的解决Ҏ记得l我发一份。在下感Ȁ不尽Q?/font>


我们下面来看看如何定制他的合ƈ规则是如何定义的吧。我先做法是找了一个例子。看看他是如何工作的?/font>


我的 Merge.xml 如下Q?/font>

清单 2 Q?/font>

<? xml version = "1.0" encoding = "UTF-8" ?>

< merge:options xmlns:merge = "http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options" >


< merge:dictionaryPattern

name = "generatedMember"

select = "Member/getComment"

match = "\s*@\s*(gen)erated\s*\n" />

<!-- if target is generated, transfer -->

<!-- change to sourceMarkup if the source is the standard -->

< merge:pull

targetMarkup = "^gen$"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />


</ merge:options >


q行前的 Source Q?/font> Java Source A Q? ?/font> 分源代码?/font>

/**

* Source javadoc 13

* <!-- begin-user-doc -->

* Source user javadoc 14

* <!-- end-user-doc -->

* Source javadoc 15

* @return source

* @generated

*/

public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");

// end-user-code

System.out.println("Source code 2");

return id == "source";

}








q行?/font> Target(Java Source B) 部分的源代码为:

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()
{
//This is my owner code
System.out.print("Will be replace");
// begin-user-code
System.out.println("Target user code 2");
// end-user-code
System.out.println("Source code 2");
return id == "source";
}


/**
* Target javadoc 19
* <!-- begin-user-doc -->
* Target user javadoc 20
* Target user javadoc 21
* <!-- end-user-doc -->
* Target javadoc 22
* @param target
* @generated NOT
*/
public void setID(boolean value)
{
//This Jet Code
System.out.println("Not be replaced!");
id = value ? "target" : "source";
System.out.println("Target code 4");
}

注意Q?/font> isID Ҏ 注释里有?/font> @generated?/font> q一行。? setID Ҏ的注释中?/font> @generated NOT ?/font>


q行后的l果是( Result of merge

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");

// end-user-code

System.out.println("Source code 2");

return id == "source";

}

// 使用?/font> Source 部分的代码?/font>

/**
* Target javadoc 19
* <!-- begin-user-doc -->
* Target user javadoc 20
* Target user javadoc 21
* <!-- end-user-doc -->
* Target javadoc 22
* @param target
* @generated NOT
*/
public void setID(boolean value)
{
//This Jet Code
System.out.println("Not be replaced!");
id = value ? "target" : "source";
System.out.println("Target code 4");
}

// l持原来 Target 中的代码没有变化?/font>

q样我们׃隄?/font>

< merge:dictionaryPattern …?> D?/font> 是定义了一个匹配模式。具体的q个匚w模式要做的动作就是在

< merge:pull

targetMarkup = "^gen$"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />

D中定义了。猜想他只是?/font> Source 部分的内容直接输出到 Target 那里M?/font>

如果我们觉得需要做点什么过滤。比如说想保?/font> Target 中一个特定的内容。这一个我们可以通过 merge:pull ?/font> sourceTransfer 属性来讄?/font>


现在来看一个例子:

?/font> merge:pull 节点修改?/font>

< merge:pull

targetMarkup = "^gen$"

sourceTransfer = "(\s*//\s*begin-user-code.*?//\s*end-user-code\s*)\n"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />

注意Q添加了一? sourceTransfer, 他的?/font> 值是一个正则表辑ּ。匹配的是被

?font face="Courier New, monospace">// begin-user-code? 和?/font> // end-user-code?/font> 包围住的所有的字符?/font>

Target 的代码ؓQ?span lang="zh-CN">我们现在只是x isID Ҏ Q?/font> ?/font>


/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");
System.out.println("This will not be replaced!");

// end-user-code
System.out.print("this will be replaced!");

System.out.println("Source code 2");

return id == "source";

}


h意看一下红色部分的两行代码?/font>

合ƈ后的代码为:

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");
System.out.println("This will not be replaced!");

// end-user-code
System.out.println("Source code 2");

return id == "source";

}


在?/font> // begin-user-code ?/font> 和?/font> // end-user-code ?/font> 外的代码全部被替换成了。这样就起到了过滤的效果?/font>



Jet Geng 2006-05-02 11:34 发表评论
]]>
可能是xml editor的一个bughttp://m.tkk7.com/JetGeng/archive/2006/05/02/44332.htmlJet GengJet GengTue, 02 May 2006 00:24:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/05/02/44332.htmlhttp://m.tkk7.com/JetGeng/comments/44332.htmlhttp://m.tkk7.com/JetGeng/archive/2006/05/02/44332.html#Feedback1http://m.tkk7.com/JetGeng/comments/commentRss/44332.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/44332.html今天使用xml editor 发现一个问题?img src="http://m.tkk7.com/images/blogjava_net/jetgeng/ecclipse%20bug/Snap1.jpg" alt="Snap1.jpg" border="0" height="138" width="674" />

如上图:我的目的是想注释掉节?font face="Times New Roman, serif">merge:pull。于是在1?font face="Times New Roman, serif">3的位|分别加上了注释的开始和关闭?font face="Times New Roman, serif">tag。但是却发现了一个奇怪的问题。他认ؓ注释C|?font face="Times New Roman, serif">2q束了。而位|?font face="Times New Roman, serif">2的?font face="Times New Roman, serif">-->?/font>是作Z个用引号“引”v来的值存在的啊。我qL了?br />

我用的版本?font face="Times New Roman, serif">Eclipse 3.2M3
version.jpg





Jet Geng 2006-05-02 08:24 发表评论
]]>Jmerge的用初?一)http://m.tkk7.com/JetGeng/archive/2006/05/01/44261.htmlJet GengJet GengMon, 01 May 2006 00:01:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/05/01/44261.htmlhttp://m.tkk7.com/JetGeng/comments/44261.htmlhttp://m.tkk7.com/JetGeng/archive/2006/05/01/44261.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/44261.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/44261.htmlJmerge的用初?一)

?/span>EMF框架中最l会Ҏ模型生成代码Q还可以反复生成。还能你自q辑的内容不丢失。够好玩的吧。那么这部分是怎么实现的呢Q看q一?/span>EMF介绍可以知?/span>EMF是通过JET完成代码生成的动作的。在?/span>使用 Eclipse Modeling Framework q行建模》这个系列的文章可以了解到q一炏V在该系列文章的W三部分q可以了解到使用JMerge 可以实现“成的代码插入现有的代码中,或者允总后的开发h员来定制所生成的代码,而不需要在重新生成代码旉新编写Q何内宏V”这L功能?/span>

他是通过创徏Junit 试cM例子的。他说过的东西我׃啰嗦了。我只是把我个h在看了他文章后的一些东西整理一下?/p>

好,现在q入正题?/p>

首先我们来说一?font face="Times New Roman, serif">JMergeq个名字?font face="Times New Roman, serif">Mergeq个单词是合q的意思。前面加了一个?font face="Times New Roman, serif">J?/font>不用多说Q肯定表C?font face="Times New Roman, serif">Java了(完全是参?font face="Times New Roman, serif">Junit,log4j…?/font>Q。那么我大? 猜测q个工具是用来合q?font face="Times New Roman, serif">Java代码的。既然是合ƈ应该符合下图描q的动作?img src="http://m.tkk7.com/images/blogjava_net/jetgeng/Jmerge-Name.jpg" alt="Jmerge-Name.jpg" border="0" height="227" width="488" />

合ƈ肯定是把两个东西和成一个。所以图中的Java Source A ?font face="Times New Roman, serif">Java Source B分别代表需要合q的部分了。最后的Result of Merge是合ƈ后的那一个结果了。应为我们合q的?font face="Times New Roman, serif">Java代码。这些代码如何合qӞ也就是我们期望的合ƈl果是什么样的。图中的Rule of merge是代表的这部分信息?/p>


在下面?font face="Times New Roman, serif">Jmerge的代码中

清单 1. 调用 JMerge

 1   // 
 2         JMerger merger = getJMerger();
 3         
 4         // set source
 5         merger.setSourceCompilationUnit(
 6                 merger.createCompilationUnitForContents(generated));
 7         
 8         // set target
 9         merger.setTargetCompilationUnit(
10                 merger.createCompilationUnitForInputStream( 
11                         new FileInputStream(target.getLocation().toFile())));
12         
13         // merge source and target
14         merger.merge();
15 
16         // extract merged contents
17         InputStream mergedContents = new ByteArrayInputStream(
18                 merger.getTargetCompilationUnit().getContents().getBytes());
19                 
20         // overwrite the target with the merged contents
21         target.setContents(mergedContents, truefalse, monitor);
22         // 
23 
24 // 
25 private JMerger getJMerger() {
26         // build URI for merge document
27         String uri = 
28            Platform.getPlugin(PLUGIN_ID).getDescriptor().getInstallURL().toString();
29         uri += "templates/merge.xml";
30                 
31         JMerger jmerger = new JMerger();
32         JControlModel controlModel = new JControlModel( uri );
33         jmerger.setControlModel( controlModel );
34         return jmerger;
35 }

我们可以很容易的扑և它们的对应物?/p>

我们先从JMerger的创建开始看起吧?/p>

uri += "templates/merge.xml";

        JMerger jmerger = new JMerger();
JControlModel controlModel = new JControlModel( uri );
jmerger.setControlModel( controlModel );

q里用一个名ZؓZؓ?/span>merge.xml的文件作ZؓZؓ输输?/span>input参数创创H新Z一?/span>JControlModel对象。传?/span>传给JMerger对象。做完这些后又调调用? setSourceCompilationUnit ? setTargetCompilationUnit Ҏ。他们们?/span>们的cȝcd都是IDOMCompilationUnitQ用q的朋友都会知道他就代表了一?/span>Java文gQ。很荣荣Ҏ׃惌v他们们肯定就?/span>Java Source A ?/span>Java Source B了至?/span>Rule of merge可以通过q调?/span>merger.merge()后的getContentsQ)Ҏ?/span>获得?/span>


除了q种调用方式外还有一个更?/span>的调用方式:

String contents = merger.execute(null, new String[] { mergeXML, source,target });


看了 execute 实现后就不难发现他的q?/span>是用的W一U?br />

关于具体如何定制合ƈ规则和用条件打在下一中写?br />





Jet Geng 2006-05-01 08:01 发表评论
]]>
在eclipse rcp中用spring框架http://m.tkk7.com/JetGeng/archive/2006/03/23/37096.htmlJet GengJet GengThu, 23 Mar 2006 14:18:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/03/23/37096.htmlhttp://m.tkk7.com/JetGeng/comments/37096.htmlhttp://m.tkk7.com/JetGeng/archive/2006/03/23/37096.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/37096.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/37096.html

很久想了如何在RcpE序中?/span>Spring。让Spring容器来管理我?/span>rcpE序中的Beans。看?/span>web目中用了spring后带来的好处Q最直接的就是看C码量了Q就一脸的憧憬。想我的好日子什么时候才会来啊?/span>

有这个憧憬后我就开始考虑改如何做了。大家肯定都知道如果?/span>eclipse rcpE序中用直接?/span>spring?/span>beanfactory无论你是使用方式都会说找不到配置文g的。这个其中的原因?/span>Eclipse 的每个插仉使用他们自己的类加蝲器(class loadQ?/span>

说明Q?/span>eclipse中类的详l的装蝲q程可以产考?/span>Contributing to eclipse 中文版?/span>p44?/span>

所以说能够正确的找?/span>bean的配|文件成了一个难题?/span>

q有一个问题就是如何管?/span>BeanFactory也是一个问题?/span>

既然提出了这两个问题Q那q一个一个的面对啊?/span>

W一个问题的解决方式。只要通过一个插件中的类可以获得?/span>

我试了一下通过如下代码可以切换class load

最头疼的问题就是如何来理spring?/span>BeanFactory。如果在每个Plugincȝl承c里都加上对beanfactory的创建。想想都是很恶心的事情。就个事情一直停滞不前。搞的我快郁h掉了?/span>

在快死q没有死的时候看C一个叫EclipseSpring目Q?/span>http://sourceforge.net/projects/eclipse-spring/Q。一看超爽。他直接把我惛_的事情直接给做了?/span>

下面我们来看看一下他的发布包里代的那个例子。这个例子很单。就只是提供了一?/span>view?/span>View里显CZ个条问候语?br />simple view.jpg

呵呵Q是不是很界面太单了。这个我们就不说了。我们来说说他这个示例中到底是怎么实现的?/span>

先看看他?/span>plugin.xml文g把?br />
pluginxml.jpg

看看那个org.eclipse.ui.view那个扩展炏V是不是有点奇怪啊。他的类?/span>net.sourceforge.eclipsespring.SpringExtensionFactory:example/userNameViewq个样子的。一a看上d不是一个类。而是一个类代了点参数?/span>

不过可以断定他就是上图显C的view了?/span>

在看看上面那个扩展点

<extension

         point="net.sourceforge.eclipsespring.beanFactoryContributors">

      <beanFactoryContributor

            class="net.sourceforge.eclipsespring.example.spring.BeanFactoryContributor"

            id="example"/>

   </extension>

q个扩展点干吗用的啊。嗯是一个问题?/span>

插g文g下面除了一?/span>plugin.xml文g外。还有一?/span>bean.xml的文件?br />springdiagram.jpg

q下一看,明白了她׃?/span>spring需要的配置文g。ƈ包括了对view的申明?/span>

?/span>net.sourceforge.eclipsespring.beanFactoryContributorsq个名字可以看出他是?/span>beanFactory做了一个扩展?/span>

去这个类看一下,是怎么回事?/span>

只是发现?br />getresource.jpg
一看可以知道。它在这里初始化?/span>spring的配|文件?br />q个插g目的整个类图ؓ
classes.jpg

E微回顾一下。在一?/span>plugin中要?/span>BeanFactoryContributorQ?/span>spring配置文g合上net.sourceforge.eclipsespring插g可以?/span>spring了?/span>

关于在这个过E中beanFactory如何创徏Q和扩展点如何被调用。我会在下一里说明。今天想睡了,虽然有点早。呵?/span>


Jet Geng 2006-03-23 22:18 发表评论
]]>
Ship Manager的界?――我的第一个RCPE序http://m.tkk7.com/JetGeng/archive/2006/03/12/34892.htmlJet GengJet GengSun, 12 Mar 2006 01:19:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/03/12/34892.htmlhttp://m.tkk7.com/JetGeng/comments/34892.htmlhttp://m.tkk7.com/JetGeng/archive/2006/03/12/34892.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/34892.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/34892.htmlShip Manager的界?/span>
――我的第一?/span>RCPE序

前一D|间说d把给朋友做的E序uid来的。一直拖到现在。真是有点不好意思。好了闲话就不说了?/span>

下图是我做出来的界面。现在看hq很_糙?br> mainui.jpg

q个E序主要d是l护一些船只的资料。然后能够迅速的查询些资料。这样就会出Cl护和查询这两大块。根据这L情况设计Z上图的界面?/span>

上图的界面包括三个部分:

l         功能DQ一?/span>ViewQ。呵呵,很基本的一个功能导航?/span>

l         船舶搜烦Q一?/span>ViewQ。提供船舶查询功能?/span>

l         船舶l护Q一?/span>EditorsQ。用于添加和修改船舶信息?/span>

q里布局部分?/span>createInitialLayout中完成的?/span>

q个在前几天?/span>blog中就可以扑ֈ代码?/span>

不过有一点还是要提一下就?/span>IfolderLayout中的createFolderҎ中的各个参数?/span>

public void addView(String viewId,
                    int relationship,
                    float ratio,
                    String refId)

refId - the id of the reference part; either a view id, a folder id, or the special editor area id returned by getEditorArea

最后一个参数表C我们添加的那个View相对于part的id?o:p>

如果我的代码是:
//add navigate view
        IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.3f, editorArea);
        left.addView(View.ID);
        
        
//Add Search part
        IFolderLayout button = layout.createFolder("button", IPageLayout.BOTTOM, 0.6f"left");
        button.addView(SearchView.ID);
效果会是
left.jpg
如果代码写成
//Add Search part
        IFolderLayout button = layout.createFolder("button", IPageLayout.BOTTOM, 0.6f, editorArea);

效果会成为:
button.jpg

呵呵Q大家不要见W。我刚开始学Q这部分的内宏V?/span>

q有是找了一?/span>DatePicker控g

http://sourceforge.net/projects/swt-datepicker q个控g使用h挺容易的。只要一句话可以了?br>
DatePickerCombo datePick = new DatePickerCombo(shell,SWT.BORDER | SWT.READ_ONLY);

他默认的日期格式?/span>DateFormat.SHORT.如果你不想用这个日期格式你只要调用一?/span>setFormatҎ好了?br>
datePick.setFormat(new SimpleDateFormat("yyyy-MM-dd"));

呵呵Q个是比较喜?/span>"yyyy-MM-dd"。不q我不要像我q么写。最好能够在整个目中统一一个地Ҏ创徏SimpleDateFormat。如Q?br>
comboBuildDate.setFormat(SystemConfig.getDateFormat());



q样Q整个项目就可以保证有一个统一的日期格式。更要紧的是如果以后有修Ҏ期格式的需求的时候只要修改一处就好了?br>




Jet Geng 2006-03-12 09:19 发表评论
]]>
开始学习RCP~程http://m.tkk7.com/JetGeng/archive/2006/02/23/32215.htmlJet GengJet GengThu, 23 Feb 2006 15:06:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/02/23/32215.htmlhttp://m.tkk7.com/JetGeng/comments/32215.htmlhttp://m.tkk7.com/JetGeng/archive/2006/02/23/32215.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/32215.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/32215.html开始学?/span>RCP~程

很早很早听?/span>RCP了。也很想来玩玩,但是一直没有找到好的点子来l手。不q近D|间有个老朋友要求帮他做个小东西。他现在的需求很单。我怕他以后有要加什么内宏V所以就想用RCP来做。刚好用他来好好学习一下,要不都不好意思在bbs.rcp.cn混了?/span>

找了本书Q?/span>Eclipse Rich Client Platform Designing Coding and Packaging Java Applications》)按照书中的例子看了v来?/span>

了解基本的:

AbstractUIPluginQ?/span>

WorkbenchWindowAdvisorQ?/span>

WorkbenchAdvisorQ?/span>

ActionBarAdvisorQ?/span>

IperspectiveFactory?/span>ViewPart几个cR?/span>

收获最大的是看到yipsilon?/span>bbs.rcp.cn中关于布局的帖子?/span>

http://www.eclipseworld.org/bbs/read.php?tid=1312&page=e#a

public class MGRPerspective implements IPerspectiveFactory {

public void createInitialLayout(IPageLayout layout) {

  Plugin plugin 
= Plugin.getDefault();

  LSEmployee employee 
= plugin.getEmployee();

  
//只有在用L陆后才能ȝ?/span>
  if (employee != null) {
    
    String editorArea 
= layout.getEditorArea();
    
    layout.setEditorAreaVisible(
false);
    
    
// 主要界面
    IFolderLayout main = layout.createFolder("main", IPageLayout.TOP, 0.95f, editorArea);
    
// 属性界?/span>
    IFolderLayout property = layout.createFolder("property", IPageLayout.RIGHT, 0.75f"main");
    
// 字典界面
    IFolderLayout dictionary = layout.createFolder("dictionary", IPageLayout.BOTTOM, 0.95f"property");

    LSPosition position 
= employee.getPosition();

    
boolean isManager = position.getManager().booleanValue();

    
if (isManager) {
    main.addView(EmployeeTableView.
class.getName());
    property.addView(PositionPropertyView.
class.getName());
    property.addView(EmployeePropertyView.
class.getName());
    }

    
if (position.getBuyer().booleanValue() || isManager) {
    main.addView(ProviderTableView.
class.getName());
    main.addView(JHInvoiceTableView.
class.getName());
    property.addView(ProviderPropertyView.
class.getName());
    property.addView(JHInvoicePropertyView.
class.getName());
    }

    
if (position.getKeeper().booleanValue() || isManager) {
    dictionary.addView(DDRepositoryView.
class.getName());
    main.addView(DBInvoiceTableView.
class.getName());
    property.addView(DBInvoicePropertyView.
class.getName());
    }

    
if (position.getSeller().booleanValue() || isManager) {
    main.addView(MemberTableView.
class.getName());
    main.addView(YDInvoiceTableView.
class.getName());
    main.addView(XSInvoiceTableView.
class.getName());
    property.addView(MemberPropertyView.
class.getName());
    property.addView(YDInvoicePropertyView.
class.getName());
    property.addView(XSInvoicePropertyView.
class.getName());
    }

    
if (position.getMaintainer().booleanValue() || isManager) {
    dictionary.addView(DDAreaView.
class.getName());
    dictionary.addView(DDBrandView.
class.getName());
    dictionary.addView(DDColorView.
class.getName());
    dictionary.addView(DDCompView.
class.getName());
    dictionary.addView(DDLevelView.
class.getName());
    dictionary.addView(DDSizeView.
class.getName());
    dictionary.addView(DDSortView.
class.getName());
    dictionary.addView(DDDescriptionView.
class.getName());
    }
  }
}
}

Ҏq段代码做出如下界面Q?/span>

rcp ui.bmp
很简单。大家见W了。呵c?br> 我的代码׃贴了。看yipsilon的代码就可以搞定布局了。再ơ感?/span>yipsilon?br> 今天写到这儿了。争取周末能把ui全部d?br>

Jet Geng 2006-02-23 23:06 发表评论
]]>
定位Eclipse源码http://m.tkk7.com/JetGeng/archive/2006/01/22/28970.htmlJet GengJet GengSun, 22 Jan 2006 15:00:00 GMThttp://m.tkk7.com/JetGeng/archive/2006/01/22/28970.htmlhttp://m.tkk7.com/JetGeng/comments/28970.htmlhttp://m.tkk7.com/JetGeng/archive/2006/01/22/28970.html#Feedback2http://m.tkk7.com/JetGeng/comments/commentRss/28970.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/28970.html定位Eclipse源码

前两天在|上看到一个需要把outline最大化的需求。我想啊这?/span>Ctrl +M不就的了Q呵呵,q个快捷我经常用。快成了条g反射了)。在往下看发现他的需求要求用~程实现。唉q个时候我?/span>Ctrl + Mq不上了?/span>

然后我就?/span>tmdQ这个功能既?/span>Eclipse本n已经实现了,那么肯定回有这L代码。我需要做的就是把q段代码扑և来。好了,定q个目标好办了?/span>

下面得惛_法怎么把这个功能地位到Eclipse源码中了。我现在知道得就只是Ctrl + M可以唤醒q部分得功能。其他的׃么都不知道了。那我怎么定位到这部分的源码呢。天哪。我该怎么办啊?/span>

后来理了一理想hEclipse中对于快捷键的实现。他们都是通过accelerator来定义的。?/span>accelerator后面一般回对应C?/span>action。这?/span>action会真真的来完成这个快捷键所要完成的功能。这样一惻I心里有了一点底。那么现在就把目标锁定到扑ֈ相应?/span>action的实现就完成了。对于找出相应的action的方法是通过扑ֈCtrl+M向对应的accelerator?/span>

那么q个action会在什么地方实现呢。我打开?/span>Plug-in Registry视图来随便看看。看看能有什么意外收莗?br>

plug-in.jpg


q真巧在发现了有org.eclipse.uiq个插g。再点进ȝC?/span>Extensions?/span>

extends.jpg
居然?/span>Maximize Active view or Editorq个扩展炏V大胆猜?/span>org.eclipse.ui会提供一个关于?/span>Maximize Active View or Editor”的实现。ؓ了证实我的猜惻I我打开?/span>org.eclipse.ui?/span>plugin.xml文g。看到有下面q一Dc?br> command.jpg

q一D证实了我的猜想?/span>

下面如果能找到那各类实现了这?/span>command?/span>ok了。找q个比较容易了。呵c只要看看那各类里面?br>

setActionDefinitionId("org.eclipse.ui.window.maximizePart");

q样的代码就可以搞定了?/span>

最后查?/span>org.eclipse.ui.internal. MaximizePartAction在他的构造函C发现了这L代码?br> control.jpg
不用多想了,他肯定是实现了这个视图最大化的功能了。看了他?/span>run函数的内Ҏ加确定就是他了?br> run.jpg
而且是toggleZoom搞定q一切。自己写了测试小了一下。果然是他。呵呵,q样完成一ơ代码定位的q程。爽了一把。离Eclipse宝库又近了一点点?/span>





Jet Geng 2006-01-22 23:00 发表评论
]]>
在Eclipse3.2中ؓ目切换Jdkhttp://m.tkk7.com/JetGeng/archive/2005/12/17/24325.htmlJet GengJet GengSat, 17 Dec 2005 02:23:00 GMThttp://m.tkk7.com/JetGeng/archive/2005/12/17/24325.htmlhttp://m.tkk7.com/JetGeng/comments/24325.htmlhttp://m.tkk7.com/JetGeng/archive/2005/12/17/24325.html#Feedback6http://m.tkk7.com/JetGeng/comments/commentRss/24325.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/24325.html׃开发项目要?/span>jdk配置比较低,所?/span>Eclipse中的WorkSpace default ?/span>jre讑־比较低。如果自己想试一下高版本?/span>jdk内容得话Q就需要切?/span>jdk得配|?/span>

?/span>3.2中我发现了一个很有方便功能,用来完成q个功能?br> 选中目中的jre,通过右键带回菜单Q?/span>

jrealert1.gif
选中Configure后就会有如下的对话框Q?br>

jrealert2.gif

通过Alernate jar可以达Cؓ该项目设?/span>jre了?/span>

q样是不是很爽啊。呵c?




Jet Geng 2005-12-17 10:23 发表评论
]]>
RCP学习W记Q一Q?Viewer合作cȝ模式http://m.tkk7.com/JetGeng/archive/2005/12/11/23319.htmlJet GengJet GengSun, 11 Dec 2005 03:24:00 GMThttp://m.tkk7.com/JetGeng/archive/2005/12/11/23319.htmlhttp://m.tkk7.com/JetGeng/comments/23319.htmlhttp://m.tkk7.com/JetGeng/archive/2005/12/11/23319.html#Feedback0http://m.tkk7.com/JetGeng/comments/commentRss/23319.htmlhttp://m.tkk7.com/JetGeng/services/trackbacks/23319.html                                                        RCP学习W记Q一Q?Viewer合作cȝ模式

Viewer是逻辑对象Q或叫做领域模型Q和昄对象之间的一个桥梁。他的主要的d是Ҏ逻辑对象来填充窗体组件。一般需要三个类来完?/span>Business Object 在窗体组件中的显C。我们这里同q?/span>TableView来演C部分的功能?/span>

TableViewer的责L用特定的对象填充?/span>TableH体lg中。是我们最l在H体要看到的对象。如下图所C的一部分Q?br>tableviewer.gif

?/span>IStructuredContentProvider?/span>ITableLabelProvider的实现类是用来帮?/span>TableViewer来完成这个Q务的?/span>

1?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  IStructuredContentProvider的Q务是“根据给定的对象Q返回一个对应的领域对象?/span>1。是通过Q?/span>public Object[] getElements(Object arg0)2Ҏ实现的?/span>

2?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  ITableLabelProvider 的Q务是“返回展现领域对象的所需的图标和文字”。这两个d分别是通过public Image getColumnImage(Object element, int columnIndex);?/span>

public String getColumnText(Object element, int columnIndex);q两个方法实现的。他们的传入参数都是Q?/span>Object element, int columnIndex?/span>Element表示当前行所要展现的数据对象Q?/span>columnIndex表示的当前处理的列号Q他是从零开始记的?/span>

知道了他们之间分配的职能后,我们可以看看他们是怎么协作的了。在TableView的需要显C的输入对象改变了(调用?/span>setInputҎ可以触发待显C领域对象的改变Q,q就会触?/span>TableView?/span>InputChange事gQ这时?/span>TableView׃去调用他本n?/span>refresh3Ҏ。最l会?/span>getRawChildrenҎ中调?/span>IStructuredContentProvider实现cM?/span>getElementsҎ或的一?/span>Object[]。供以后创徏Item时用。整个调用过E可以用下面?/span>strack图来表示Q?br>gettreetrack.gif
通过调用IStructuredContentProviderL了一个对象数l后Q就会根据对象数l来创徏昄?/span>Item。我们可以先看一?/span>ITableLabelProviderQ?/span>TableLabelProvider?/span>ITableLabelProvider的一个实现类Q?img src="http://m.tkk7.com/images/blogjava_net/jetgeng/createItem.gif" alt="createItem.gif" border="0" height="398" width="550">

在更?/span>Item的时候提供每?/span>TableView需要的Text?/span>Image好了。他们最l在TableViewer?/span>doUpdateItemҎ中调?/span>ITableLabelProvider?/span>getColumnText?/span>getColumnImageҎ?/span>

 

要实C个在TableView中显C特定对象只需要实?/span>IStructuredContentProvider实现cȝgetElementsҎ。和ITableLabelProvider?/span>getColumnTextҎ?/span>

下面是我CZ中的代码Q?/span>

TableLabelPrivateQ?img src="http://m.tkk7.com/images/blogjava_net/jetgeng/tablelable.gif" alt="tablelable.gif" border="0" height="359" width="895">

TableContentPrivateQ?br>contentprivate.gif




Viewer也都是采?/span>ContentProvide?/span>LabelProvide的协作方式来工作?/span>

其他?/span>

参考文献:

1?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  Contributing to Eclipse 中文?/span> Page 290

2?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  org.eclipse.jface.viewers. IStructuredContentProvider.java

3?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  q个Ҏl承?/span>StructuredViewer。可参?/span>StructuredViewer.java





Jet Geng 2005-12-11 11:24 发表评论
]]>
վ֩ģ壺 ˬָ߳ëƬ| ˵va| ձvaҹĻþ| 99re6ƵƷ| ѹۿ| ձ˳վ| ҹƵվ| þþۺɫһ| þþþAVƬ| ҹƷþþþþapp| av˾Ʒһ| ޹Ʒ99þþþþ| þùƷ| ȫAëƬѿվ| ޳AVƬһ| þŷƷ| ѹվ߹ۿ | ߳˾Ʒ| 18Ƶѹۿ| ް鵺̳| лиëƬѿ| ŮƵƵȫƵվ| 97޳ҹҹ| Ƭ51˿Ӱ| AVŮһ| վ߹ۿ| ߹ۿĶ | 18ֹۿ˽ӰԺ| ޾ҹþþþþ| ޾Ʒ߹ۿ| 99߹ۿƵվ| ˵ĺÿѹۿƵ| Ʒѹһ| 91߾Ʒһ| ʪôýˬƵ| ˬýôƵ| ͵ľƷ| 18߹ۿ| պƵ| ѿĻɫƬ| ߹ۿ|