Feeling

              三人行,必有我?guī)熝?/p>

             ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評(píng)論 :: 0 Trackbacks
          DataSet Joint
          一個(gè)簡單的Dataset Joint Example

          一般來說,Eclipse插件開發(fā)用到GEF的機(jī)會(huì)并不是很多,大概也就是結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)管理,流程控制等應(yīng)用罷了。看了一下網(wǎng)上的例子,大部分都是基于數(shù)據(jù)庫管理的,我想這應(yīng)該是因?yàn)閿?shù)據(jù)庫設(shè)計(jì)的Dataset Joint是程序開發(fā)最常見的吧。

          GEF的一個(gè)簡單Example可以參加GEF自帶的例子Logic,功能非常強(qiáng)大,了解了Logic,就能夠了解相應(yīng)的GEF開發(fā)。在網(wǎng)上這方面的教程并不多,我也基本上沒開,我個(gè)人始終認(rèn)為看書不如看代碼。當(dāng)然我以前也沒有接觸過GEF,畢竟要完全掌握這個(gè)東西并非一日之功,要想在上面有所造詣不通過一個(gè)大型項(xiàng)目的加強(qiáng)是不可能的。上面的這個(gè)小東西也是我花了半個(gè)月,還請(qǐng)教了一些人幫忙debug才研究出來的,還是花費(fèi)了相當(dāng)功夫。

          不過GEF是一套框架,上面的這個(gè)小東西,麻雀雖小,五臟俱全,而且基本上可以算一個(gè)不依賴于Eclipse平臺(tái)的小應(yīng)用程序。不過GEF(Ver 3.3)這個(gè)項(xiàng)目依賴于Eclipse OSGI,如果想完全獨(dú)立于Eclipse,需要自己做一些小小的改變,也不算太麻煩。最后基本上SWT+JFACE+GEF基本上就可以自己做應(yīng)用了。

          獨(dú)立于Eclipse的GEF簡單教程可以參見:
          http://www13.plala.or.jp/observe/GEF/GEF_StandAlone.html
          http://www13.plala.or.jp/observe/GEF/GEF_Tool_StandAlone.html

          日文寫的,我看不懂,只看代碼。

          這里我只說幾點(diǎn):
          1、如果面板需要滾動(dòng)條,并且能夠自由伸縮,顯示的話,請(qǐng)選擇ScrollingGraphicalViewer,相應(yīng)的RootEditPart請(qǐng)選擇ScalableFreeformRootEditPart。

          2、GraphicalViewer是通過EditPartFactory拿到子EditPart的,有些類似于JFace TreeViewer的ContentProvider,根據(jù)特定的Element拿到對(duì)應(yīng)的EditPart,不同于TreeViewer的是,GEF的getChildren方式是寫在EditPart里的,每一個(gè)EditPart都要實(shí)現(xiàn) protected List getModelChildren( ) 方法,而TreeViewer的getChilder是在ContentProvider內(nèi)部實(shí)現(xiàn)的。因此EditPart更為靈活,因?yàn)镋ditPart還可以通過EditPartFactory拿到上下文環(huán)境,而TreeViewer ContentProvider脫離了Viewer本身,只能通過Model來取,這樣當(dāng)Model和Viewer不一致的時(shí)候,GEF游刃有余,而TreeViewer卻舉步維艱。

          3、EditPart的FeedBack Figure的背景顏色是和它的背景取異或操作的,因次再拖動(dòng)EditPart的時(shí)候,如果FeedBack Figure覆蓋EditPart的時(shí)候,F(xiàn)igure的顏色很難看,解決這個(gè)問題的辦法就是設(shè)置GraphicalViewer的背景顏色為白色。

          4、希望EditPart能夠拖動(dòng),需要實(shí)現(xiàn)getDragTracker( )方法:

              public DragTracker getDragTracker( Request req )
              {
                  DragEditPartsTracker track 
          = new DragEditPartsTracker( this );
                  
          return track;
              }


          5、刷新EditPart的顯示需要覆寫protected void refreshVisuals( )方法,當(dāng)Model的模型改變,需要刷新View的時(shí)候可以通過事件監(jiān)聽來顯示的調(diào)用該方法。

          6、設(shè)置EditPart在父親EditPart的位置調(diào)用( (GraphicalEditPart) getParent( ) ). setLayoutConstraint(EditPart arg0, IFigure arg1, Object arg2)方法。 

          7、如果是XYLayoutEditPolicy,內(nèi)部EditPart位置的改變會(huì)調(diào)用XYLayoutEditPolicy的protected Command createChangeConstraintCommand( EditPart child,
             Object constraint )方法,需要記錄EditPart位置可以在這里進(jìn)行。

          8、EditPart的Selection事件需要注冊(cè)SelectionEditPolicy,你可以針對(duì)不同的EditPart實(shí)現(xiàn)不同的SelectionEditPolicy。

          9、內(nèi)部有自由布局的EditPart需要注冊(cè)LayoutEditPolicy的子類。而該EditPart的Figure需要設(shè)置對(duì)應(yīng)的LayoutManager。

          10、GraphicalViewer監(jiān)聽Key操作需要setKeyHandler(new KeyHandler(viewer))。

          11、進(jìn)行連接操作的源EditPart需要實(shí)現(xiàn)protected List getModelSourceConnections( )方法,目標(biāo)EditPart需要實(shí)現(xiàn)protected List getModelTargetConnections( )方法,創(chuàng)建一個(gè)連接需要使用ConnectionDragCreationTool。連接圖形的EditPart必須繼承AbstractConnectionEditPart。實(shí)際上每個(gè)連接會(huì)被創(chuàng)建出2個(gè)EditPart,只有這2個(gè)EditPart的Model相等的時(shí)候,一個(gè)連接才會(huì)成立。

          12、如果需要連接,需要注冊(cè)GraphicalNodeEditPolicy,并且實(shí)現(xiàn)protected org.eclipse.gef.commands.Command getConnectionCompleteCommand(
             CreateConnectionRequest request )和protected org.eclipse.gef.commands.Command getConnectionCreateCommand(
             CreateConnectionRequest request )方法。注冊(cè)代碼:

          installEditPolicy( EditPolicy.GRAPHICAL_NODE_ROLE,
                          
          new ConnectionCreationEditPolicy( ) );


           先寫到這兒,慢慢再補(bǔ)。


          評(píng)論

          # re: GEF開發(fā)入門要點(diǎn)(個(gè)人經(jīng)驗(yàn)) 2007-11-20 09:20 lordtan
          沒人頂啊 ?
          我來頂一個(gè)  回復(fù)  更多評(píng)論
            

          # re: GEF開發(fā)入門要點(diǎn)(個(gè)人經(jīng)驗(yàn)) 2008-05-13 16:13 gef
          能不能把你的source code貼上來看看啊  回復(fù)  更多評(píng)論
            

          # re: GEF開發(fā)入門要點(diǎn)(個(gè)人經(jīng)驗(yàn)) 2008-07-22 00:59 路人
          支持一下   回復(fù)  更多評(píng)論
            

          # re: GEF開發(fā)入門要點(diǎn)(個(gè)人經(jīng)驗(yàn)) 2009-11-12 18:54 chunchong
          wang99567@163.com
          發(fā)份代碼學(xué)習(xí)一下吧  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
          主站蜘蛛池模板: 左云县| 大安市| 海淀区| 惠来县| 会理县| 麻江县| 黎川县| 旬邑县| 土默特左旗| 高要市| 玉环县| 庆云县| 丘北县| 循化| 汉阴县| 新余市| 上饶县| 揭阳市| 南充市| 广安市| 永新县| 炎陵县| 临潭县| 天镇县| 锦屏县| 依兰县| 广平县| 县级市| 交口县| 镇坪县| 洪湖市| 邯郸市| 宜川县| 泊头市| 黄陵县| 兴仁县| 黔南| 齐河县| 泾川县| 肥东县| 建阳市|