邋遢居

          我的Java天堂

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

          #

          寶貝,你離開(kāi)我快一個(gè)多月了。回來(lái)吧。我想你了!
          posted @ 2006-08-03 15:47 Jet Geng 閱讀(561) | 評(píng)論 (0)編輯 收藏

          ???

          Bugzilla是一款很專業(yè)的Bugzilla跟蹤工具。他有具有一般Bug Trace軟件所必須的功能。

          1.??? 提供一個(gè)開(kāi)發(fā)和測(cè)試交互的平臺(tái),將測(cè)試和改錯(cuò)程序化。不需要測(cè)試人員就每一個(gè)問(wèn)題和開(kāi)發(fā)人員直接交流,也避免了發(fā)生錯(cuò)誤被遺忘的問(wèn)題。

          2.??? 提供錯(cuò)誤檢索功能,供PM和測(cè)試經(jīng)理掌握測(cè)試和改錯(cuò)情況

          除了基本功能外,Bugzilla還有如下強(qiáng)大功能:

          1.??? 基于Web的訪問(wèn)方式,不需要安裝客戶端

          2.??Email自動(dòng)通知錯(cuò)誤相關(guān)人員

          3.??任意數(shù)量,類(lèi)型的附件。如屏幕截圖,日志文件

          4.??豐富的字段,如產(chǎn)品名,組件名,版本號(hào),錯(cuò)誤發(fā)生的平臺(tái)等等,可以精確的描述錯(cuò)誤。

          5.???強(qiáng)大的檢索功能,可以根據(jù)錯(cuò)誤的所有特性進(jìn)行檢索。如日期,責(zé)任人,提交人,所屬版本,所屬組件,狀態(tài),等等。

          6.??? 強(qiáng)大的即時(shí)報(bào)表和歷史報(bào)表

          7.??? 可以定制的權(quán)限管理機(jī)制,實(shí)現(xiàn)對(duì)權(quán)限的精確控制。如只有Test Manager才能關(guān)閉錯(cuò)誤。

          8.??? 使用MySql作為后臺(tái)數(shù)據(jù)庫(kù),穩(wěn)定,數(shù)據(jù)遷移也很方便。

          9.??? 完全開(kāi)放的Perl代碼,如果需要,可以自己實(shí)現(xiàn)特定功能

          (以上文字摘自http://jason.rocklv.net/freesoftware/ar01s06.html

          上面內(nèi)容聽(tīng)起來(lái)很空洞,下面就結(jié)合實(shí)際的工作環(huán)境來(lái)簡(jiǎn)單描述一下這些強(qiáng)大的功能給我們工作帶來(lái)的方便。在開(kāi)始之前我們來(lái)看一幅圖:
          image002.gif

          這個(gè)圖中描述了一個(gè)bug的生命周期(Life Cycle of a Bug)。從圖中我們可以了解到一個(gè)Bug從生到死一般會(huì)經(jīng)過(guò)NewàEvaluationàResolvedàVerificationàClose。在這個(gè)過(guò)程中參與的角色有兩個(gè):測(cè)試人員和開(kāi)發(fā)人員。

          我們先從測(cè)試人員的角度這個(gè)系統(tǒng)。

          測(cè)試人員看除了新建Bug以外其實(shí)一個(gè)很重任務(wù)就是回測(cè)。也就是上圖Resolved一下的工作。如何安排回測(cè)的工作,Bugzilla可以為你提供一個(gè)很人性的方式。這種人性的方式得益于Bugzilla強(qiáng)大的搜索能力。
          search.JPG
          這個(gè)就是他的搜索界面。這么多搜索條件可以讓你精確的搜索到你所需要的集合。搜索到的集合如下:
          searchresult.jpg
          你可以使用標(biāo)題中的任何一欄作為排序條件。可不要小看這個(gè)排序的順序哦,他可是可以直接作為你工作的順序的。不相信?那好吧來(lái)看看下面這個(gè)圖
          navgaite.jpg

          直接點(diǎn)擊First,Last,Prev,Next就可以達(dá)到在你選擇的Bug中來(lái)回游走(其實(shí)這個(gè)就是你工作的過(guò)程)。

          如果你說(shuō)今天下班前這部分工作可能做不完,明天我又不想在輸入那么多的查詢條件,好辦保存他啊。直接看右下角:
          savesearch.jpg

          如果有一批
          bug我已經(jīng)回測(cè)完了。且他們所作的動(dòng)作也差不多。直接批量進(jìn)行,不要猶豫。
          batch.jpg

          看“Change Several Bugs at Once”就是為這個(gè)時(shí)候的你量身訂做的。Bugzilla還有很多不錯(cuò)的功能我這里就不多說(shuō)了。

          <!--[if !supportEmptyParas]-->?<!--[endif]-->

          下面來(lái)看看Bugzilla能給開(kāi)發(fā)者帶來(lái)什么樣的好處。開(kāi)發(fā)者在整個(gè)的bug生命周期中主要處理ResolvedASSIGNED(這個(gè)功能項(xiàng)目經(jīng)理或項(xiàng)目負(fù)責(zé)人用的比較多)這兩塊功能。但是這兩塊功能是應(yīng)該算是bug在其生命周期中最輝煌的一段時(shí)間。他們就是為這個(gè)時(shí)候而生。

          好了廢話不多說(shuō)了。我們來(lái)看看一般開(kāi)發(fā)人員如何利用Bug Trace系統(tǒng)。首先登陸到系統(tǒng)à搜索自己的Bug(有的Bug Trace提供了讓用戶一登陸就可以看到自己的Bugà打開(kāi)開(kāi)發(fā)環(huán)境à修改代碼à自測(cè)à提交修復(fù)。需要不停的在Bug Trace系統(tǒng)和開(kāi)發(fā)環(huán)境間不停的切換。

          BugzillaEclipse 給我們提供了一個(gè)更人性的解決方案。假設(shè)開(kāi)發(fā)人員小J來(lái)到了辦公室在開(kāi)機(jī)和倒茶的時(shí)候他心里就在盤(pán)算著今天可能有些bug需要修復(fù)。Ok,可愛(ài)的Eclipse起來(lái)了。那就先看看今天有沒(méi)有自己的bug吧。
          eclipsebugsearch.jpg
          這個(gè)就是集成在EclipseMylar)中的Bug搜索頁(yè)面。搜索回來(lái)的結(jié)果你可以用來(lái)創(chuàng)建一個(gè)Task。有了這個(gè)Task那你就會(huì)省力多了。可以減少你在大項(xiàng)目中找找文件的痛苦。
          workbench.jpg
          看,現(xiàn)在我的workbench是不是很整潔啊。
          說(shuō)老實(shí)話Bugzilla的界面真的不咋樣。如果評(píng)論多了會(huì)很長(zhǎng),而且還沒(méi)有分頁(yè)。不過(guò)在Eclipse中這個(gè)問(wèn)題就好多了,因?yàn)槲覀冇?/span>outline啊。outline.jpg

          看起來(lái)很不錯(cuò)吧。

          除了這個(gè)這個(gè)Task還有除了能讓你看到整潔的workbench外還可以給你一個(gè)整潔的思路。
          shedual.jpg

          通過(guò)設(shè)定時(shí)間讓你有效的管理你的時(shí)間。這樣就讓在開(kāi)發(fā)過(guò)程中最難掌控的部分管理起來(lái)了。

          BugzillaEclipseMylar)的好處我就不一一多說(shuō)了。如果你不相信我的話可以先去體驗(yàn)一下。

          其實(shí)這個(gè)時(shí)候Bugzilla可以當(dāng)成一個(gè)項(xiàng)目管理軟件來(lái)用了,不光光是Bug了。如果我們能加上報(bào)表,這樣就可以為項(xiàng)目管理者提供最準(zhǔn)確的項(xiàng)目進(jìn)度數(shù)據(jù)。

          <!--[if !supportEmptyParas]-->?<!--[endif]-->

          說(shuō)道報(bào)表Bugzilla為項(xiàng)目管理者們提供了很強(qiáng)大的報(bào)表功能。為項(xiàng)目總結(jié)等場(chǎng)合提供最有價(jià)值的原始資料。

          <!--[if !supportEmptyParas]-->?<!--[endif]-->

          由于Bugzilla采用Mysql做為數(shù)據(jù)源,所以備份還原數(shù)據(jù)很方便。這個(gè)為系統(tǒng)管理帶來(lái)了不少方便。

          參考文獻(xiàn):

          http://jason.rocklv.net/freesoftware/ar01s06.html

          http://www.bugzilla.org/docs/2.18/html/using.html

          posted @ 2006-07-25 21:42 Jet Geng 閱讀(4805) | 評(píng)論 (1)編輯 收藏

          ???

          讀《代碼大全》筆記 -- 保持松散耦合

          在上學(xué)的時(shí)候就聽(tīng)老師說(shuō),寫(xiě)程序要做到低耦合。這話是牢牢的記在心里了(我還算是個(gè)乖學(xué)生)。可是在具體的編程過(guò)程中有犯糗了。犯糗原因就是對(duì)于常見(jiàn)耦合分辨不清、不知道在我的應(yīng)用中那些耦合可以接受、那些耦合在特定場(chǎng)合可以接受、那些耦合要盡量避免、最重要的就是不同的耦合在代碼中如何表現(xiàn)會(huì)有如何的影響。

          還好這些問(wèn)題近期在一本叫《代碼大全》的書(shū)里面找到了(插一句,如果你還沒(méi)有聽(tīng)說(shuō)過(guò)這本書(shū),趕緊,一定要趕緊打開(kāi)Google,去Google一下)。

          書(shū)中提到(中文版 p101)了常見(jiàn)的耦合的種類(lèi)有如下幾種:

          l????? 簡(jiǎn)單數(shù)據(jù)參數(shù)耦合

          l????? 簡(jiǎn)單對(duì)象耦合

          l????? 對(duì)象參數(shù)耦合

          l????? 語(yǔ)義上的耦合

          對(duì)于簡(jiǎn)單數(shù)據(jù)參數(shù)耦合比對(duì)象參數(shù)耦合更有靈活性書(shū)中在耦合標(biāo)準(zhǔn)-靈活性(p100)中進(jìn)行了描述。并得出對(duì)象參數(shù)耦合要比簡(jiǎn)單數(shù)據(jù)參數(shù)耦合的耦合程度要高。

          但是在使用的過(guò)程中發(fā)現(xiàn)很多場(chǎng)合如果使用“簡(jiǎn)單數(shù)據(jù)參數(shù)”的話,函數(shù)的參賽數(shù)列表會(huì)很長(zhǎng)。這個(gè)聲明的時(shí)候倒是沒(méi)什么,但是在調(diào)用的時(shí)候就有可能寫(xiě)錯(cuò)參數(shù)的個(gè)數(shù)(這個(gè)還好 ide會(huì)告訴我們),參數(shù)寫(xiě)的順序不正確(這個(gè)就比較郁悶了,容易出bug而且還不容易找)。

          我想如果能用“簡(jiǎn)單數(shù)據(jù)參數(shù)”就盡量使用,在不同的場(chǎng)合考慮使用“對(duì)象參數(shù)”。為了這個(gè)問(wèn)題我曾經(jīng)和我的同事狂吵過(guò)。所以印象很深。

          ?

          其實(shí)最要命的最難處理的是那些“語(yǔ)義上的耦合”。別人我不知道。看完了書(shū)中的定義,在回想自己以前寫(xiě)過(guò)的代碼。很多都犯了“語(yǔ)義上的耦合”,并且給項(xiàng)目帶來(lái)了很多不便。丟人啊。
          posted @ 2006-07-15 15:59 Jet Geng 閱讀(680) | 評(píng)論 (0)編輯 收藏

          今天用了一下spring-mock來(lái)測(cè)試系統(tǒng)中的dao.感覺(jué)真的不錯(cuò)。這個(gè)很簡(jiǎn)單,記下來(lái)得原因是怕自己會(huì)忘。
          你的測(cè)試用例必須從AbstractDependencyInjectionSpringContextTests繼承。他會(huì)幫你創(chuàng)建beanfactory以及beans.但是你必須告訴他到那去找配置文件。這個(gè)工作就是通過(guò)getConfigLocations方法來(lái)完成。一般情況下,這個(gè)方法都很簡(jiǎn)單。
          看看我的就知道他要干些什么了。
          @Override
          ????
          protected?String[]?getConfigLocations()?{
          ????????
          //?TODO?Auto-generated?method?stub
          ????????return?new?String[]{?"/springContext-hibernate.xml"?};
          ????}
          好了,這樣就配置完成了。下面的工作就是獲取你要測(cè)試的對(duì)象,并對(duì)他測(cè)試了。

          public?ShipMasterDao?getShipMasterDao()?{
          ????????
          if(shipMasterDao?==?null?){
          ????????????shipMasterDao?
          =?(ShipMasterDao)this.applicationContext.getBean("shipMasterDao");
          ????????}
          ????????
          return?shipMasterDao;
          ????}
          ????
          ????
          public?void?testGetUser(){
          ????????ShipMaster?shipMaster?
          =?this.getShipMasterDao().getShipMaster(1);
          ????????
          this.assertEquals(shipMaster.getImono(),?"imo01");
          ????}
          嗯,很簡(jiǎn)單吧。但是很有用。
          記下,怕自己忘掉。
          posted @ 2006-07-14 18:02 Jet Geng 閱讀(4677) | 評(píng)論 (3)編輯 收藏

          Mylar 簡(jiǎn)介--開(kāi)源工作平臺(tái)續(xù)

          1.???? 引子

          ?? 很久很久以前有一個(gè)木匠,不但粗心而且還健忘。雖然在每天工作開(kāi)始前,會(huì)考慮以下大概需要做的工作。但是在實(shí)施的過(guò)程中經(jīng)常會(huì)出現(xiàn)這樣的狀況。看有一天他需要下一塊1.2m 的料。這個(gè)木匠就甩著膀子過(guò)來(lái)了。在動(dòng)手前肯定是要量一下得,把手往口袋里一摸。卷尺是摸到,摸到了昨天晚上吃花生時(shí)留下得殼(還挺講究公德,沒(méi)有到處亂 扔。)。放哪兒呢,放哪兒呢……。經(jīng)過(guò)了半個(gè)小時(shí),終于在一個(gè)角落找到了卷尺。那個(gè)興奮啊。興沖沖的跑到木料前,愣了一下罵了一句“tmd鋸子又不知道跑 那去了!”。繼續(xù)去找鋸子去了……。

          ?????? 其實(shí)在我們的軟件開(kāi)發(fā)中也會(huì)類(lèi)似的情景。我就不再啰嗦了。

          1.????? 解決方案

          我要說(shuō)的這個(gè)解決方案就是Eclipse + Mylar。Eclipse就不用多說(shuō)了。但是Mylar卻是不得不說(shuō)。

          Mylar 最大的亮點(diǎn)就是讓你只關(guān)注于你當(dāng)前的工作(Active Task)。在整個(gè)工作區(qū)中只是顯示和你工作相關(guān)的內(nèi)容。這樣在Mylar中就有了一個(gè)核心的概念任務(wù)(Task)。這個(gè)任務(wù)我們完全可以對(duì)應(yīng)到工作中的 一個(gè)任務(wù),如你的頭給你分配得一個(gè)任務(wù)、測(cè)試組的同仁提交的一個(gè)需要你修改得bug等等。

          我們每天的工作應(yīng)該由這些任務(wù)組成。

          Mylar 中首先提供了一個(gè)對(duì)于任務(wù)管理的功能。圖 – 1 顯示了一個(gè) Mylar 的任務(wù)管理頁(yè)面。關(guān)于如何創(chuàng)建使用 Mylar 中的任務(wù)可以參考官方提供的一個(gè) flash demo 我就不啰嗦了 http://www.eclipse.org/mylar/doc/demo/mylar-demo-04.html
          Snap1.jpg
          有了任務(wù)后,就可以把你的工作關(guān)注到特定的任務(wù)上了。這個(gè)部分在上面的提到的那個(gè)官方的 Flash 中也有描述。另外還有一個(gè)老外的 blog 也作了點(diǎn)說(shuō)明。
          http://weblogs.java.net/blog/kirillcool/archive/2005/11/mylar_a_very_us.html
          說(shuō)到任務(wù), Mylar 提供了兩種任務(wù)。一個(gè)是本地任務(wù)還有一個(gè)就是知識(shí)庫(kù)任務(wù)(這個(gè)我翻譯的不好原文是 repository task )。本地任務(wù)很好理解就是任務(wù)的數(shù)據(jù)是以文件的形式保存在本地的。一般情況下只有本人可以使用。知識(shí)庫(kù)任務(wù)是從 BugTrace 系統(tǒng)(目前支持 Bugzilla JIRA )里面獲取 Task. 這樣就可以在一個(gè)團(tuán)隊(duì)中使用了。關(guān)于這個(gè)功能的使用可以參考 http://eclipse.org/mylar/doc/demo/mylar-demo-04-reports.html. 從個(gè)人角度來(lái)說(shuō),我是最喜歡這個(gè)塊的功能。想一想啊, QA 組的人測(cè)出 bug 紀(jì)錄到 bug Trace 系統(tǒng)中。開(kāi)發(fā)人員可以在他自己的開(kāi)發(fā)環(huán)境中。繼續(xù)想,項(xiàng)目管理人員把 Project 管理軟件中的 task bug 的形式存放于 bugtrace 系統(tǒng)中(其實(shí)這個(gè)時(shí)候的 BugTrace 系統(tǒng)不光管理的是 Bug 了,可以把它認(rèn)為識(shí)一個(gè)簡(jiǎn)單的項(xiàng)目管理)。
          關(guān)于這個(gè)項(xiàng)目的整體全局的介紹可以參考 http://www.eclipsezone.com/articles/mylar/?source=archives

          我想她肯定會(huì)有美好的未來(lái)的。

          posted @ 2006-07-11 10:12 Jet Geng 閱讀(2085) | 評(píng)論 (0)編輯 收藏

          今天把開(kāi)發(fā)環(huán)境架好了。我的環(huán)境包括以下幾個(gè)部分。

          源碼管理:cvs

          bug管理:bugzilla

          項(xiàng)目管理:open workbench

          Cvs沒(méi)什么好說(shuō)的。

          不過(guò)在安裝bugzilla的過(guò)程中有點(diǎn)小問(wèn)題。

          我是根據(jù)http://www.websina.com/cn/bugzilla-install-windows.html一文進(jìn)行安裝的。

          我的使用的軟件版本如下:

          Bugzilla Version 2.20.1

          MySql version 4.1

          Perl version 5.8.7

          為了減少安裝 perl 模塊的麻煩。我使用了 漢化 Bugzilla 中收集的模塊 BugzillaModules-2.20 。這個(gè)在 http://sourceforge.net/projects/bugzilla-cn 可以找到。

          所有都就緒后,我 再次運(yùn)行 Bugzilla 的安裝檢查程序( CheckSetup.pl 。發(fā)現(xiàn)給了我下面的錯(cuò)誤:

          error.jpg

          找了半天在 Byron Jones 寫(xiě)的《 Installing Bugzilla on Microsoft Windows http://www.bugzilla.org/docs/win32install.html 終于找到原因了。

          產(chǎn)生這個(gè)錯(cuò)誤是因?yàn)?/font> MySQL 4.1 及以后的版本使用了新的密碼加密算法,而使用的 Perl DBD::MySql 模塊不夠新,不支持新的加密算法。你可以采取兩種方式來(lái)解決這個(gè)問(wèn)題:一是使用 新的 DBD::MySql 模塊 ,不過(guò)需要自己編譯;另一種是在 MySQL 中強(qiáng)制使用兼容老版本的密碼加密算法:

          bugalizza.jpg

          這樣就搞定了。

          這個(gè) open workbench 。通過(guò)看它的簡(jiǎn)介發(fā)現(xiàn)他也是一個(gè)類(lèi)似于很有趣的軟件。核心部分是 java 實(shí)現(xiàn)。而界面卻是 MFC 做的。不可思議吧。

          http://www.openworkbench.org/ 可以下載

          我下載以后不能跑。給我報(bào)錯(cuò)是說(shuō)“ Here's the fix for the JRE[n] not found. My specs is Windows 2000 w/ JDK1.5.0 and private JRE (in JDK dir). ”

          我想啊,想啊。我明明安裝了 JDK1.5.0_04 了啊。其他使用 java 的程序( Eclipse )都可以好好的跑啊。

          為什么到了這兒就不可以了呢。火大。

          后來(lái)在論壇中找到一個(gè)解決方案:

          1. login as administrator

          2. open regedit

          3. goto HKEY_LOCAL_MACHINE/Software/JavaSoft

          4. create if not exist : subkey "Java Runtime Environment" (the key did not exist before on my computer)

          5. In the new subkey add String value
            CurrentVersion="1.5.0"

          6. In the new subkey, create new subkey "1.5.0"

          7. In the subkey 1.5.0 create the string values JavaHome, MicroVersion, RuntimeLib (read http://java.sun.com/j2se/1.4.2/runtime_win32.html)
            if you installed JDK in c:\program files\java\jdk1.5.0 then set the values to
            JavaHome="c:\program files\java\jdk1.5.0"
            MicroVersion="0"
            RuntimeLib="C:\Program Files\Java\jdk1.5.0\jre\bin\client\jvm.dll"

            根據(jù)這個(gè)方案我修改了我的注冊(cè)表。修改結(jié)果如下圖:

          openbench.jpg

            修改了這個(gè)以后就能順利啟動(dòng)。小用了一下,感覺(jué)很不錯(cuò)。基本能滿足我的需求了。

            這樣我的工作臺(tái)就完全搞定了。全部開(kāi)源產(chǎn)品。省錢(qián)啊。

          posted @ 2006-06-04 00:58 Jet Geng 閱讀(4179) | 評(píng)論 (6)編輯 收藏

          今天發(fā)現(xiàn)一個(gè)比較好用的工具Foxit。一個(gè)很小巧的pdf閱讀器。很小且啟動(dòng)快。他最大的亮點(diǎn)是有一個(gè)Foxit Library的程序。這個(gè)是我一直想要的功能。在他這里實(shí)現(xiàn)的挺不錯(cuò)的。

          foxit pdf.jpg

          有了這個(gè)功能。我就不用為了找一本書(shū)而翻箱倒柜了。呵呵。更好的是老吳(http://www.wuguole.com/)還做了漢化。


          foxit about.jpg

          在這里謝過(guò)了。

          只要google一下就可以找到很多下載地址了。

          posted @ 2006-06-03 09:40 Jet Geng 閱讀(727) | 評(píng)論 (0)編輯 收藏

          一個(gè)不錯(cuò)的代碼示例網(wǎng)站
          http://www.java2s.com/Code/Java/CatalogJava.htm
          我是想找點(diǎn)關(guān)于draw2d的例子才發(fā)現(xiàn)它的。
          posted @ 2006-05-27 09:25 Jet Geng 閱讀(614) | 評(píng)論 (0)編輯 收藏

          今天有幸碰到關(guān)于Connection以及Router使用的問(wèn)題。覺(jué)得有點(diǎn)意思就把它記了下來(lái)。以背后查。

          看到一個(gè)例子中看到圖 -- 1所示的功能。


          圖-1.JPG

          其中圖-1中的連線是自適應(yīng)的會(huì)保持該線段是最短的(其實(shí)他是使用的ShortestPathConnectionRouter,這個(gè)時(shí)候我還不知道,我是一個(gè)新手大家見(jiàn)笑了)。經(jīng)過(guò)一番調(diào)查以后發(fā)現(xiàn)原來(lái)是在EditPart中的refreshVisuals方法中有如下代碼。

          代碼--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);
          ????????}

          當(dāng)時(shí)就猜啊,他肯定是在給一個(gè)特定的Layer加上一個(gè)什么玩意。然后就通過(guò)這個(gè)玩意來(lái)完成對(duì)于路徑的計(jì)算(其實(shí)這些東西完全是從代碼的字面意思而得到的)。我這些東西加到我的代碼中了。但是我運(yùn)行的效果還是沒(méi)有起作用。他依舊是以前的那幅得行。我抓,抓也沒(méi)有用。就是達(dá)不到我要的效果。

          抱著試一下的想法我打開(kāi)了我的ConnectionEditPart(就是連線的那個(gè)EditPart),發(fā)現(xiàn)在createFigure中我是這么寫(xiě)的。

          代碼 -- 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賦了一個(gè)ConnectionRouter。最終其效果的是這一個(gè)ConnectionRouter起作用了。

          Md剛掉他就萬(wàn)事大吉了。

          到這里代碼部分其實(shí)就完了。但是他背后的還有一點(diǎn)故事。

          這里有三個(gè)角色:

          1Connection

          2ConnectionAnchor.

          3 ConnectionRouter

          這個(gè)類(lèi)是用來(lái)顯示兩點(diǎn)之間的線段 (Line), 他的起點(diǎn)和終點(diǎn)是通過(guò) ConnectionAnchor 來(lái)定義的。至于他的其他點(diǎn)是通過(guò) ConnectionRouter 計(jì)算設(shè)置的。從這個(gè)地方來(lái)看 ConnectionRouter 是一個(gè)負(fù)責(zé)計(jì)算的工具類(lèi)。這樣完全可以讓所有的 Connection 使用一個(gè) ConnectionRouter 實(shí)例(這就是今天最要記下的部分)。

          gef 中他就為我們提供了這樣的機(jī)制。下面的這段話是 Gef help 中的一句話。他就說(shuō)明了這個(gè)道理。

          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.

          這個(gè)道理要轉(zhuǎn)換成代碼的話就是代碼 – 1 了。

          這個(gè)東西很簡(jiǎn)單。希望對(duì)像我一樣的新手有點(diǎn)幫助。

          posted @ 2006-05-22 22:21 Jet Geng 閱讀(1497) | 評(píng)論 (2)編輯 收藏

          特別喜歡那個(gè)例子的一點(diǎn)一點(diǎn)添加功能的做法。

          關(guān)于這個(gè)例子中使用的原理八進(jìn)制講的很清楚了。我就不啰嗦了。我就把自己讀這部分代碼的筆記記下來(lái)。

          GEF 練習(xí)圖.jpeg

          posted @ 2006-05-06 10:34 Jet Geng 閱讀(787) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共7頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 下一頁(yè) 
          主站蜘蛛池模板: 长治县| 和林格尔县| 德钦县| 西平县| 乐平市| 呈贡县| 视频| 宾阳县| 子洲县| 和政县| 泽州县| 新源县| 西林县| 鹤庆县| 子洲县| 宁化县| 汾阳市| 建水县| 怀仁县| 原阳县| 扬中市| 久治县| 溧水县| 天峻县| 宜昌市| 南郑县| 曲周县| 漳平市| 大渡口区| 班玛县| 乐亭县| 山阴县| 阿拉善盟| 康平县| 宝山区| 余干县| 石门县| 广元市| 马山县| 桐城市| 白城市|