锘??xml version="1.0" encoding="utf-8" standalone="yes"?> GEF婧愮爜鍒嗘瀽錛堝叚錛?GEF 鐨凟ditPart鐨勮亴鑳藉垎紱?__ 璺ㄥ浗鏃跺皻濯掍綋闆嗗洟騫垮憡閮ㄩ棬 鐨勬晠浜?浜?BR> 閮ㄩ棬騫插皢灝忔潕涓繪寔浼氳錛岀畝鐭槓鏄庝細璁富棰樺拰瑕佹眰鍚庯紝錛堜負浜嗘彁楂樹細璁晥鐜囦細璁瘡浜烘渶澶?/SPAN>5鍒嗛挓鍙戣█錛屾渶鍚?/SPAN>20鍒嗛挓璁ㄨ鏃墮棿錛?/SPAN>5鍒嗛挓GraphicalEditPart鍏堢敓鍋氭葷粨錛夈?/SPAN> 灝忕帇棣栧厛绔欒搗鍙戣█錛氣滅洰鍓嶆垜浠?/SPAN>EditPart閮ㄩ棬錛岃櫧鐒訛紝涓昏浠誨姟鏈夋槑紜畾涔夛紝浣嗘槸鍐呴儴鐨勫伐浣滄祦紼嬩笉鏄庣‘錛屾病鏈夊彲渚濈珷紼嬨?/SPAN>...鈥濄?/SPAN> 鈥滄槸鍛錛屽叕鍙哥洰鍓嶈繕娌℃湁鎴戜滑閮ㄩ棬鐨勬爣鍑嗘搷浣滄墜鍐岋紝寰堝闂閮芥湁寰堝ぇ闅忔満鎬э紝宸ヤ綔鐨勫ソ鍧忚繃浜庝緷璧栦漢鍛樻湰韜殑宸ヤ綔鑳藉姏錛岃繖鍗佸垎涓嶅埄浜庝漢鍛樼殑鍐呴儴嫻佸姩浠ュ強鏂頒漢鍛樼殑琛ュ厖鈥濇垜浠殑GraphicalEditPart"鏁欑粌"婊℃剰鐨勭偣鐐瑰ご銆?/SPAN> 灝忛瓘璧鋒潵琛ュ厖涓涓嬶細鈥滅敱浜庢垜浠唴閮ㄦ瘡涓漢鐨勫仛浜嬫柟娉曪紝閮芥槸鍚勬湁涓濂楃粷媧伙紝嫻佺▼涓嶄竴鑷達紝緇忓父瀵艱嚧鍦ㄥ伐浣滃涓婁笅灞傞氱煡鍗忎綔鍑虹幇闂銆傚湪姘村鉤閮ㄩ棬娌熼氭椂錛屼篃甯稿父涓嶆祦鐣呪濄傝繖鏄釜澶у鍒氭瘯涓氬崄鍒嗘椿娉肩殑灝忓濞樸?/P>
鈥滀負浠涔堝ぇ瀹舵繪槸瑙夊緱濂崇殑鑱屽憳涓嶅ソ錛岀湅澶氭湁鐏墊皵鐨勪竴涓皬濮戝鍛錛屽張鏄釜濂借嫍瀛愩傗?/SPAN>GraphicalEditPart"鏁欑粌"姝ゆ椂鍐呭績涓殑鑷垜褰㈣薄綆鐩村氨鏄崕浣楀啀涓栵紝閭f劅瑙夌湡鏈夌偣椋橀鐒朵箮錛?/SPAN>GraphicalEditPart鍏堢敓涓嶇敱鑷富鍦版檭浜嗘檭鑴戣銆?/SPAN> 鎺ヤ笅鏉ュ叾瀹冧漢綰風悍鍙戣█錛?/P>
鈥滃伐浣滅粡楠屽緢闅劇浉浜掍氦嫻侊紝縐瘡涓庢彁楂樸傚緢闅懼湪閮ㄩ棬綰у宸ヤ綔嫻佺▼絳夎繘琛屼紭鍖栵紝緙轟箯涓撲笟鍖栥傗?/P>
鈥滄垜浠粡甯歌鍜?/SPAN>Figure閮ㄩ棬涓璧峰伐浣滐紝璺熻釜鎿嶄綔鎵ц銆傝繖寰堟槸嫻垂宸ヤ綔鏃墮棿錛屽挨鍏舵槸褰撴煇涓伐浣滈渶瑕佸緢闀挎椂闂達紝鎴栬呬腑闂寸粡甯擱渶瑕佸拰瀹㈡埛浜ゆ祦鍙嶉涓孌墊椂闂達紝榪欐牱闈炲父褰卞搷宸ヤ綔鏁堢巼銆傗?/SPAN> 鈥滃浜庡鎴風殑闂寰堥毦蹇熸牴鎹幇鏈夌殑緇忛獙妯″紡褰㈡垚瑙e喅鏂規(guī)錛岃櫧鐒舵垜浠叕鍙告湇鍔℃佸害鍜屽箍鍛婅川閲忛珮浜庡叾瀹冨叕鍙革紝浣嗘槸緇忓父鐢變簬鍙嶅簲閫熷害澶參錛屾椿琚叾瀹冨叕鍙鎬粠涓姠浜嗗幓錛岄攢鍞儴闂ㄥ父甯告姳鎬ㄦ垜浠儴闂ㄩ熷害澶參銆傗?/P>
鈥滃叕鍙稿湪鐩稿簲瀹㈡埛闇瑕佹搷浣滆繃紼嬩腑錛屽緢闅鵑拡瀵瑰鎴鋒煇涓渶姹傞噸鏂拌皟鏁淬傚鎴峰父甯告姳鎬ㄥ湪鍒朵綔榪囩▼涓緢闅懼仛浜涘皬鐨勬敼鍔ㄣ傗?/P>
鈥︹?/P>
鐢變簬GraphicalEditPart鍏堢敓綆$悊灝忓笀鐨勫甫棰嗭紝EditPart閮ㄩ棬鐨勪細璁繪槸綆鐭湁鏁堛?/SPAN>1涓皬鏃跺鍑犲垎閽熷ぇ瀹墮兘鎶婇棶棰樼畝鏄庢壖瑕佺殑琛ㄨ揪鍑烘潵銆?/SPAN> 灝忔潕鐜【涓嬪洓鍛ㄢ滄渶鍚庯紝鐢?/SPAN>GraphicalEditPart閮ㄩ暱鎬葷粨涓涓嬩粖澶╃殑浼氳鈥濄?/SPAN> 涓鐩存矇榛樼殑GraphicalEditPart鍏堢敓绔欎簡璧鋒潵錛屽崄鍒嗙簿紲烇紝涔熺幆欏句簡涓涓嬪洓鍛紝娓呬簡娓呭棑瀛愩?/SPAN> 鈥滈鍏堛佹垜瑕佽嚜鎴戞璁ㄤ竴涓嬶紝榪欎竴騫村鎬繪槸蹇欎貢浜庣揣鎬ョ殑灝忎簨鎯呭綋涓紝寰堜箙娌℃湁鏀墮泦澶у鐨勫緩璁拰鍙嶉浜嗭紝榪欏崄鍒嗕笉鍒╀簬鎴戜滑閮ㄩ棬鐨勫彂灞曘備粖澶╁ぇ瀹朵婦鍑哄緢澶氱洰鍓嶉儴闂ㄧ殑闂錛岃繖浜涘厖鍒嗗弽鏄犱簡澶у瀵歸儴闂ㄧ殑涓氬姟鐔熸?zhèn)壗E嬪害錛屾垜鐩鎬俊錛岃繖鏄洜涓哄ぇ瀹跺崄鍒嗗叧娉ㄥ叕鍙哥殑鏈潵錛屽笇鏈涘叕鍙歌秺鍔炶秺濂斤紝鑰屼笉鏄ㄥぉ灝や漢鐨勭墷楠氾紝鍙兘鏈変簺棰嗗浼氳鐨勮繖鏄壘姣涚梾瀵歸瀵間笉婊★紝鍦ㄦ垜榪欓噷錛屾垜浠婂ぉ鍦ㄤ竴嬈℃槑紜〃鏄庯紝鎴戝崄鏂歸紦鍔卞ぇ瀹訛紝嬈㈣繋澶у灝嗕竴浜涙剰瑙佸弽棣堢粰鎴戯紝甯屾湜澶у涓嶄粎浠呮槸綆鍗曞弽棣堝湪宸ヤ綔涓殑鐩存帴鍥伴毦錛岃屼笖緇忚繃鑷繁鐨勬濊冩彁鐐煎啓鎴愮畝媧佺殑鏂囦功緇欐垜錛屾渶濂藉彂鎸ヨ嚜鎴戜富鍔ㄥ拰鍒涢犳ф彁鍑轟竴浜涘彉闈╁緩璁傝繖浜涗笢瑗垮皢鏄垜浠儴闂ㄥ強鍏徃娼滃湪鐨勭弽璐電殑璐㈠瘜錛屽悓鏃朵篃鏄垜浠儴闂ㄦ湭鏉ュ彂灞曟柟鍚戠殑涓涓噸瑕侀儴鍒嗐傗?/P>
鈥滀粖澶╃殑浼氳澶у涓昏鏄拡瀵規(guī)垜浠儴闂ㄧ殑闂錛屽笇鏈涗細鍚庡ぇ瀹跺啀浠庡叕鍙告暣浣撹冭檻榪欎簺闂錛屼互鍙婃湭鏉ユ墿鍏?/SPAN>EditPart閮ㄩ棬浼氬甫鏉ヤ粈涔堥棶棰橈紝姣斿澶у鍙互鍙傝冩垜浠綋鍒濇垚绔嬫椂閬囧埌閭d簺闂錛岃繖浜涢棶棰樺皢鏉ュ浣曢伩鍏嶆垨鍑忓皯銆傗?/SPAN> 鈥滄寜璁″垝錛屼細鍚庯紝灝忔潕錛屽皬瀛欙紝灝忎竵錛屽皬榛勮繕鏈夋垜錛屽皢鎬葷粨浠婂ぉ浼氳錛屽悓鏃躲佸埗瀹氬嚭鏈潵閮ㄩ棬緇勭粐鍙橀潻鐨勭瓥鐣ャ傚湪姝ゆ湡闂達紝甯屾湜澶у韙婅穬鐨勫皢鑷繁鐨勬兂娉曞垱鎰忎簬鎴戜滑浜ゆ祦銆傗?/P>
鈥滆繕鏈変竴浠朵簨鎯咃紝浠婂ぉ瑕佹壒璇勪竴涓嬪皬涓佸悓浜嬶紝鐜板湪寮浼氫笉榪熷埌浜嗭紝浣嗘槸錛屼笉浠呮病鍙戣█銆佹垜鐪嬩綘浠庡紑浼氬氨涓鐩寸湅鍓嶅ぉ鍙戠殑鏉愭枡錛屼負浠涔堜笉鎻愬墠鍑嗗錛岃繖鏄借澶у姣忎釜浜虹殑鏃墮棿錛屼笅涓嶄負渚嬨備粖鍚庛佸皬鏉庝綘鍦ㄩ儴闂ㄨ绔犻噷鍔犱竴鏉★紝閮ㄩ棬寮浼氬墠蹇呴』鎻愬墠闃呰鐞嗚В浼氳鏉愭枡錛屽嚒榪濆弽鑰咃紝鍖呮嫭鎴戝湪鍐呬竴寰嬬珯鍒頒細璁瑙掕惤绔欑潃闃呰瀹岃祫鏂欏悗錛屽湪鍥炰細璁駭浣嶃傛垜鐨勮瘽瀹屼簡銆傗?/P>
灝忎竵婊¤劯閫氱孩錛屼笉鐢卞湴浣庣潃澶達紝鍙屾墜鎹備綇浜嗚叜甯紝涓嶆暍鍠樻皵浜嗭紝鎭ㄤ笉寰楁湁涓湴緙濋捇榪涘幓銆?/P>
鈥滀粖澶╀細璁粨鏉熴傗濆皬鏉庡甯冦?/P>
浼氬悗鏍規(guī)嵁灝忓瓩鐨勪細璁褰曪紝寰堝揩鐨勫皬鏉庡嚑涓漢鎬葷粨鍑轟互涓嬬殑涓涓奔楠ㄥ浘銆?/P>
浠涔堟槸鍥犳灉鍥撅紵 鍥犳灉鍥劇殑鍙戞槑鑰?Kaoru Ishikawa 鏄竴鍚嶇鐞嗕笓瀹訛紝鍏舵渶鍒濈殑鐩殑鏄敼榪涜濺闂寸殑璐ㄩ噺鎺у埗宸ヤ綔銆傛濡備互涓嬬ず渚嬫墍紺猴紝鍥犳灉鍥捐繕鑳借〃杈懼叾浠栫幆澧冧腑鐨勫洜鏋滃叧緋匯?BR> 鐢變簬鍥犳灉鍥劇殑褰㈢姸寰堝儚楸肩殑楠ㄦ灦錛屾墍浠ュ畠鍙堢О浣滈奔楠ㄥ浘銆傞奔鐨勮剨楠ㄤ笂鍑犳牴鏈澶х殑楸奸琛ㄧず涓昏鐨勫師鍥犵被鍒?BR>渚嬪錛屽湪鏈緥涓紝涓昏鐨勫師鍥犵被鍒湁鐩庢牸椴佷漢/鏈辯壒浜恒佷腹楹︿漢銆佽惃鍏嬮婁漢鍜岃鏇煎簳浜猴紝榪欎簺縐嶆棌緹や綋閮芥兂鎺у埗鑻辨牸鍏幫紝浠庤屽鑷翠簡璇ユ垬浜夌殑鐖嗗彂銆?/P>
涓昏綾誨埆涓殑杈冨皬楸奸琛ㄧず涓昏鐨勫師鍥犮備緥濡傦紝鍦ㄦ湰渚嬩腑錛屽湪钀ㄥ厠閫婁漢榪欎釜綾誨埆鏂歸潰錛岄粦鏂環(huán)鏂垬浜夌殑涓昏鍘熷洜鍦ㄤ簬鍏厓 1051 騫磋惃鍏嬮婄帇鐖卞痙鍗庤璇哄皢鐜嬩綅浼犵粰濞佸粔涓涓栥?/P>
鎮(zhèn)ㄨ繕鍙互鍦ㄤ富瑕佸師鍥犱笂娣誨姞嬈¤鍘熷洜銆?/P> 鎺ヤ笅鏉ユ垜浠互涓涓晠浜嬬殑鏂瑰紡鏉ヨВ鍐崇涓夌瘒閬楃暀涓嬫潵闂錛?/SPAN> 宸插瓨鍦ㄤ竴涓笁瑙掑浘褰ditPart錛屾垜浠兂閲嶇敤瀹?浣嗘槸鎴戜滑榪橀渶瑕佸鍔狅紙鎴栧垹鍘伙級杈規(guī)鍙皟鏁寸殑鐗規(guī)э紝濡備綍淇濊瘉鏃犻渶閲嶆柊寤虹珛涓涓柊鐨凟ditPart錛屾垨鑰呭仛鍑轟笐闄嬬殑緇ф壙錛屽綋鍔熻兘涓嶆柇緇勫悎鍚庯紝鍑虹幇鏃犳暟瀛怑ditPart綾? 濡備綍鐢辨鏋惰嚜鍔ㄥ畬鎴怳ndo鍙奟edo鍔熻兘錛?/P>
璇濊鍦ㄦ煇涓法鍥芥椂灝氬獟浣撻泦鍥腑鍥藉尯騫垮憡閮ㄩ棬錛堣繖鏄竴瀹朵富钀ュ鉤闈㈠箍鍛婄殑騫垮憡鍏徃錛屽惉璇磋懀浜嬮暱鏄釜騫翠粎鍔炵櫨鐨勮佸ごGraphicalEditor鍏堢敓錛屾潵鑷但璧湁鍚嶇殑eclipse鍩洪噾璐㈠洟錛夛紝鏈夌洰鍓嶄富瑕佹湁涓や釜瀛愰儴闂?/SPAN>EditPart(騫垮憡絳栧垝閮?/SPAN>)鍜?/SPAN>Figuer(騫抽潰璁捐閮?/SPAN>)銆?/SPAN> EditPart閮ㄩ暱鏄竴浣嶄腑騫村厖婊′俊蹇冨拰媧誨姏GraphicalEditPart鍏堢敓銆?/SPAN> Figuer閮ㄩ暱鏄竴浣嶄笌閮ㄩ棬鍚嶅悓鍚嶇殑騫垮憡涓昏璁″笀緹庝附闈掓槬鐨?/SPAN>Figure灝忓銆?/SPAN> EditPart閮ㄩ暱GraphicalEditPart鐩墠涓昏鑲╄礋鐫涓夐」浠諱綍錛?/SPAN> 鐢變簬鍏徃鎵╁ぇ浜嗕笟鍔★紝鎶曞叆甯傚満鐨勪駭鍝佺綾繪瘮浠ュ線澧炲姞浜嗕笁鍊嶏紝EditPart閮ㄩ暱宸ヤ綔鍙樺緱寮傚父綣佸繖鏈変簺蹇帇鍨簡錛屾劅瑙夎嚜宸卞揩鎴愪負鏁存棩椹潃閲嶇墿騫磋繄鐨勯┐瀛愶紝鈥滄槸涓嶆槸鑷繁鑰佷簡鈥滸raphicalEditPart鍏堢敓寮濮嬪父甯告鐤戣嚜宸變簡銆?/SPAN> 榪欏ぉ錛?/SPAN>EditPart閮ㄩ暱鏀跺埌鎬婚儴涓灝佷俊錛?/SPAN> GraphicalEditPart鍏堢敓錛?/P>
棣栧厛鎴戜唬琛ㄥ叕鍙告劅璋㈡?zhèn)q欎簺騫村嫟濂嬪嚭鑹茬殑宸ヤ綔銆傛垜浠叕鍙稿湪涓浗鐭煭涓夊勾鐨勮惀涓氶澧為暱浜嗗洓鍊嶏紝鍚屾椂EditPart涓浗閮ㄩ棬鍦ㄦ鏈熼棿鑾峰緱浜嗗叕鍙告渶鏈夋椿鍔涢儴闂ㄥ錛岃繖浜涙垚緇╅兘涓庢?zhèn)ㄧ殑鍔姏鏄垎涓嶅紑鐨勩傛嵁鎴戜滑浜嗚В錛屾?zhèn)ㄥ?/SPAN>EditPart閮ㄩ棬榪欎笁騫翠腑錛屽疄鏂戒簡鍑犻」瀵屾湁鍒涙剰鐨勫埗搴︽敼闈╋紝濡傛垚绔?/SPAN>Tool鎯呮姤鏀墮泦閮ㄩ棬錛屾帹騫垮悗澶уぇ鎻愰珮浜嗘暣涓叕鍙?/SPAN>EditPart閮ㄩ棬涓氬姟澶勭悊鑳藉姏銆備負浜嗚繘涓姝ユ墿澶т笟鍔★紝鍏徃鍦ㄦ湭鏉ョ殑涓ゅ勾閲屽皢鍦ㄤ笘鐣屽悇鍦板挨鍏舵槸涓浗澧炲姞40%鐨勫尯鍩熷箍鍛婇儴闂紝姝e鎮(zhèn)ㄦ墍鐭ラ亾鐩墠鍏徃瀵逛簬EditPart閮ㄩ棬鐨勭粍緇囪鍒掍互鍙婅矗浠誨埗搴﹁繕鏈夊緢澶氫笉瀹屽杽涔嬪錛岃繖灝嗗崄鍒嗕笉鍒╀簬鍖哄煙閮ㄩ棬鎵╁睍鐨勮鍒掋傛晠鎴戝鎵樻?zhèn)ㄥ仛鍑恒婃湭鏉ュ箍鍛婇儴緇勭粐鐨勮鍒掋嬭鍒掍功錛屾湰鏈堝簳灝嗛個璇鋒偍鏉ユ婚儴鍙傚姞緇勭粐瑙勫垝涓庡彉闈╂柟妗堢殑璇勫浼氾紝灞婃椂灝嗕細瀵規(guī)偍鐨勮鍒掍功榪涜璇勫銆傚閫氳繃璇勫錛屽叕鍙告墍鏈夊箍鍛婇儴灝嗕細鎸夌収鎮(zhèn)ㄧ殑璁″垝涔﹁繘琛屽彉闈┿?/SPAN> 紲濇効涓栫晫鏄庡ぉ鐨勮垶鍙幫紝鍥犳垜浠屽彉寰楁洿鍔犵編濂姐佸厖婊℃縺鎯呬笌鎯寵薄 CEO GEF 鈥滃櫌錛佸お媯掍簡錛岃繖灝佷俊鏉ョ殑鐪熸槸鍙婃椂錛屽鏋滃啀緇х畫濡傛鐨勮瘽錛屾垜瑕佸帇鍨簡錛屽彧濂藉彟璋嬪畠鑱屼簡銆傚棷錛岃繖鍥炴垜瑕佸ソ濂藉湴鍐欒繖涓鍒掍功銆傝繖鏍鳳紝韜笂鎷呭瓙鎬葷畻鏈夊噺杞葷殑甯屾湜銆傛湁涓婂徃鐨勮祻璇嗭紝鎴戣涓灞曞畯鍥句竴鐣傗滸raphicalEditPart涓嶇敱鑷富鎷嶄簡涓嬫瀛愯嚜璦鑷鍚庯紝寮犲紑鍙岃噦錛岀牥鍦頒竴涓嬩話闈犲湪妞呰儗涓婏紝娣辨繁鍦板嚭浜嗗彛姘旓紝鍙岀洰杞誨悎宸ヤ綔鐨勫帇鍔涗技涔庣墖鍒婚棿娑堝け錛岄『鎵嬫埓涓婁簡浠栭偅鍗佸垎閰鋒瘷鐨勫お闃抽暅錛屽皬澹版墦寮鏃佽竟CD錛屽櫌錛屽濞佸し涔嬪錛屾劅瑙夎嚜宸辨鏃跺氨鍦ㄥ濞佸し甯︾潃澧ㄩ暅韜哄湪閲戦粍銆佹澗杞佹俯鏆栫殑娌欐嘩錛屽惞鐫鍙e摠錛岀儹鎯呬技鐏殑澶槼絀胯繃澶槼闀滐紝瓚婅繃鐪肩毊錛屽皢鍑犵紩妯$硦鐨勫厜鑺掑甫鍏ョ溂涓紙鍏跺疄鏄粬閭i珮鐡︾殑鍚婄伅錛夛紝嫻烽涔犱範錛堟梺杈圭殑鐢?shù)椋庢墖锛夊Q屽湪浜彈鐫榪欑墖鍒誨畞闈欏ぉ鍫傛劅瑙夛紝嬋鎯呭垱鎰忎笉鏂秾鍑猴紝鍟婏紝涔呰繚浜嗙殑鎰熻銆?/SPAN> 寮騫詫紒榪呴熺殑鎵撳紑浠栧枩鐖辯殑鑴戝浘杞歡 -- Mindjet Manager錛岃褰曚笅鑴戜腑鐨勬瀯鎬濓紝鐢諱笅濡備笅璁″垝瑕佺偣
GraphicalEditPart鍏堢敓褰撳ぉ瀹夋帓浜嗛儴闂ㄥ強浼氳璁″垝銆傜粡榪?/SPAN>EditPart閮ㄩ棬绱у紶鏈夊鐨勫噯澶囦細璁璁虹殑璧勬枡錛岀涓夊ぉ銆佹寜鏃?/SPAN>8:30寮浼氥?BR>
GraphicalEditPart鍏堢敓榪樺寰甯革紝鍑嗘椂鎻愬墠5鍒嗛挓鍧愬湪浼氳瀹ゅ墠杈硅涓娿備粬鍠滄閮ㄩ棬鐨勫皬浼欏瓙浠紝铏界劧榪欎簺灝忎紮瀛愪滑鍋氫簨鎯呮椂甯告湁浜涗笉鍛紝浣嗘槸浠栨洿嬈h祻浠栦滑鐨勬椿鍔涘拰瀵屾湁鍒涢犳縺鎯呫傛墍浠ャ佹瘡姣忓紑浼氭椂錛屼粬鏇存効鍧愬湪鏃佽竟鍚繖浜涘皬浼欏瓙浠殑鎰忚錛屸滅浉姣旇緝褰撲釜濞佹鐨勫啗闃熼暱瀹橈紝鎴戞洿鎰忔槸涓涓弗鏍煎張鍜岃敿鐨勪紭縐鏁欑粌鈥?/SPAN>GraphicalEditPart鍏堢敓甯稿父濡傛鎻愰啋鑷繁涓嶈瓚婁繋浠e簴銆?/SPAN>
鏂囩珷鏉ユ簮:http://xdingding.cnblogs.com/archive/2005/12/07/292516.html
]]>
鐪嬫潵GraphicalEditPart鍏堢敓瑕佸ぇ騫蹭竴鍦猴紝嬈茬煡璇︽儏錛岃鍚笅鍥炲垎瑙?IMG src="http://xdingding.cnblogs.com/Emoticons/emsmiled.gif" align=absMiddle border=0>
GEF婧愮爜鍒嗘瀽錛堝洓錛?/SPAN> GEF 娑堟伅杞箟 ___ Tool鐨勪綔鐢?/SPAN>
鎺ョ潃涓婁竴鑺傦細
鎴戜滑鍏堣В鍐沖涓嬮棶棰橈細
鍦ㄧ晫闈㈡搷浣滆繃紼嬩腑錛屾垜浠笇鏈涢潰瀵圭殑鏄竟妗嗚皟鏁翠簨浠訛紝鍥懼艦縐誨姩浜嬩歡錛屾垨鑰呮槸緙栬緫鏂囨湰浜嬩歡錛岃屼笉鏄師濮嬬殑榧犳爣鍜岄敭鐩樹簨浠訛紵
鏈瀹氫箟錛?/P>
緋葷粺UI浜嬩歡錛?/SPAN> 涓鑸敱鏌愪簺璁$畻鏈轟漢鏈轟氦浜掔‖浠跺彂鍑轟俊鍙鳳紝騫朵笖緇忔搷浣滅郴緇熺悊瑙e悗浜х敓鐨勪簨浠訛紝渚嬪錛氬師濮嬬殑榧犳爣鐨勭Щ鍔ㄣ佺偣鍑誨拰閿洏鐨勬暡鍑諱簨浠剁瓑銆?/SPAN>
UI涓氬姟璇箟浜嬩歡錛?/SPAN> 鐢辯郴緇?/SPAN>UI浜嬩歡鍜屽叾瀹?/SPAN>UI涓氬姟璇箟浜嬩歡瑙﹀彂錛岀敱UI涓氬姟浠g爜鐞嗚В鍚庝駭鐢熺殑浜嬩歡錛堟搷浣滅郴緇熶笉鍙悊瑙o紝鍚屾椂鏃犱換浣曢鍩熺殑涓氬姟璇箟錛夛紝濡?/SPAN>2D鍥懼艦鐨勫昂瀵歌皟鏁達紝2D鍥懼艦鐨勭偣鍑伙紝2D鍥懼艦鐨勭Щ鍔ㄣ?/SPAN>
錛堝叾瀹炰笉浠呴檺浜庝簨浠剁殑杞箟錛屽寘鎷?/SPAN>UI鐨勬敼鍙橈紝涔熼渶瑕佺敱緋葷粺UI璇箟杞崲鍒?/SPAN>UI涓氬姟璇箟鏉ヤ嬌鐢級
UI涓氬姟璇箟浜嬩歡鍦?/SPAN>Controller鎺у埗涓殑浼樼偣鏄槗浜庣悊瑙c佺淮鎶ゅ拰鎵╁厖錛屽叿浣撶殑涓昏鏈変互涓嬫柟闈細
a.鍑忓皯緋葷粺UI浜嬩歡鍒ゆ柇閫昏緫閮ㄥ垎浠g爜鐨勯噸澶嶃傛瘮濡傚湪Controller閮ㄥ垎浠g爜鏃犻渶鍒嗘鐫澶ч噺閫昏緫閲嶅鐨勪唬鐮侊紝褰撻紶鏍囩Щ鍔ㄦ椂鍘誨垽鏂┒绔熸槸涓涓?/SPAN>2D鍥懼艦鐨勫昂瀵告敼鍙橈紝榪樻槸涓涓?/SPAN>2D鍥懼艦鐨勭Щ鍔紝榪樻槸涓緇?/SPAN>2D鍥懼艦鐨勭Щ鍔紝榪樻槸2D鍥懼艦DragAndDrop鐨勫姩浣溿?/SPAN>
b.Controller閮ㄥ垎鐨勪唬鐮佽涔夋槑紜傚湪Controller鍐呴儴澶勭悊浠g爜鍜屾帴鍙d腑鐩存帴闈㈠鐨勬槸UI涓氬姟璇箟錛屽鍥懼艦鐨勭Щ鍔紝鍥懼艦鐨勫昂瀵告敼鍙橈紝榪欐牱銆佷唬鐮佹槗浜庣悊瑙c佽皟璇曠瓑銆?/SPAN>
b.Controller閮ㄥ垎浠g爜鏃犻渶涓虹郴緇?/SPAN>UI浜嬩歡淇濆瓨鐘舵併傚2D鍥懼艦鐨勭Щ鍔ㄤ腑錛屽鏋滆繖浜涗簨浠剁洿鎺ュ湪Controller涓鐞嗭紝浠庡紑濮?/SPAN>MouseDown,鍒?/SPAN>MouseMove錛屽埌MouseUp榪囩▼涓紝鍦?/SPAN>Controller涓闆嗕腑淇濈暀榪欐牱浼楀鐘舵侊紝鏋佹槗閫犳垚Controller浠g爜鍏蜂綋澶氬ご鑱岃矗鐨勭棁鐘訛紝浠庤屾?zhèn)d笂涓ラ噸鐨劸_劇鍒嗚:)銆?/SPAN>
浜庢槸涔?/SPAN>GEF鐨?/SPAN>FrameWork鏈夌粰鍑轟互涓嬬殑瑙e喅鏂規(guī)錛?/SPAN>
鍥?/SPAN>A
濡備笂鍥?/SPAN>A錛?/SPAN>
GEF閫氳繃Tools(鏍?/SPAN>interface鏄?/SPAN>Tool)錛屽綋鐒跺湪瑙嗗浘涓婄殑Menu鍜?/SPAN>Toolbar鏄氳繃Action鍙戝嚭錛岃繖涓槸eclipse鐨?/SPAN>Workbench鏈哄埗錛屽湪姝ゅ氨涓嶈璁轟簡銆備互涓嬫槸Tool鐨勭被緇ф壙鏍戯細
鍥?/SPAN>B
浠庝笂鍥?/SPAN>B鍙互鐪嬪嚭
浠?/SPAN>Tool緇ф壙鐨勮繖浜涚被鍧囧鐞嗕竴涓垨鑰呬竴綾?/SPAN>UI涓氬姟璇箟浜嬩歡錛屽叾涓渶瑕佷繚鐣欎腑闂寸姸鎬佺殑瀛愮被鍧囦互XXXTracker褰㈠紡鍑虹幇銆?/SPAN>
棣栧厛榪欎簺Tool鐨勫疄鐜扮被閫氳繃Tool鐨勬帴鍙o紙涓婂浘鍙寵竟錛夛紝鎺ユ敹鐣岄潰鏉ョ殑浜嬩歡錛岀劧鍚庤皟鐢ㄥ唴閮?/SPAN>handleXXX錛岃繖鏍烽氳繃鍐呴儴鍑芥暟getTargetRequest()[createTargetRequest()]鍜実etSourceRequest()[createSourceRequest()]錛屾妸緋葷粺UI浜嬩歡杞崲涓?/SPAN>UI涓氬姟璇箟浜嬩歡鍙?/SPAN>Request錛堝鍥?/SPAN>C錛夈傝嚦姝?/SPAN>Tool浼氶氳繃璋冪敤鐩稿叧鑱旂殑EditPart鐨勬帴鍙e皢UI涓氬姟璇箟浜嬩歡閫氱煡鍒?/SPAN>EditPart涓備簬鏄湪Controller(EditPart)涓粎浠呴渶瑕佺悊瑙e鐞?/SPAN>Request瀵硅薄銆?/SPAN>
鍥?/SPAN>C
涓嬮潰浠?/SPAN>ResizeTracker浠g爜涓轟緥錛?/SPAN>
class ResizeTracker
protected Request createSourceRequest() {
ChangeBoundsRequest request;
request = new ChangeBoundsRequest(REQ_RESIZE);
request.setResizeDirection(getResizeDirection());
return request;
}
protected Command getCommand() {
List editparts = getOperationSet();
EditPart part;
CompoundCommand command = new CompoundCommand();
command.setDebugLabel("Resize Handle Tracker");//$NON-NLS-1$
for (int i = 0; i < editparts.size(); i++) {
part = (EditPart)editparts.get(i);
command.add(part.getCommand(getSourceRequest()));
}
return command.unwrap();
}
protected void eraseTargetFeedback() {
if (!getFlag(FLAG_TARGET_FEEDBACK))
return;
if (getTargetEditPart() != null)
getTargetEditPart().eraseTargetFeedback(getSourceRequest());
setFlag(FLAG_TARGET_FEEDBACK, false);
}
protected boolean handleButtonUp(int button) {
if (stateTransition(STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {
eraseSourceFeedback();
eraseTargetFeedback();
performDrag();
}
return true;
}
鏈鍚庤繕鏈変釜闂鏄?BR>
Tool榪欎簺浜嬩歡鎺ュ彛錛屽浣曚粠Viewer浼犻掕繃鏉ョ殑鍛紵
鎴戠敾浜嗕竴涓畝瑕佺殑綾誨浘
鍥?/SPAN>D
鍙傜収涓婂浘錛屼笅闈㈢綏鍒楅噸瑕佷唬鐮侊細
澶у涓昏浠ヤ笅涓ゆ柟闈?/P>
涓銆佸垱寤鴻繖浜涘叧閿簨浠跺鐞嗛摼鐨勮繃紼嬶紙娉ㄦ剰鍥句笂鐨勭矖浣撴枃瀛楋級錛?/P>
浜屻佹秷鎭粠SWT涓?/SPAN>Canvas瀹炰緥浼犻掑埌Tool榪囩▼錛堝浘D涓敞閲婃爣絳劇殑欏哄簭錛夛紱
class GraphicalEditor
public void createPartControl(Composite parent) {
createGraphicalViewer(parent);
}
protected void createGraphicalViewer(Composite parent) {
GraphicalViewer viewer = new ScrollingGraphicalViewer();
viewer.createControl(parent);
setGraphicalViewer(viewer);
configureGraphicalViewer();
hookGraphicalViewer();
initializeGraphicalViewer();
}
protected void setGraphicalViewer(GraphicalViewer viewer) {
getEditDomain().addViewer(viewer);
this.graphicalViewer = viewer;
}
class EditDomain
public void addViewer(EditPartViewer viewer) {
viewer.setEditDomain(this);
if (!viewers.contains(viewer))
viewers.add(viewer);
}
class GraphicalViewerImpl
public void setEditDomain(EditDomain domain) {
super.setEditDomain(domain);
// Set the new event dispatcher, even if the new domain is null. This will dispose
// the old event dispatcher.
getLightweightSystem()
.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));
}
private final LightweightSystem lws = createLightweightSystem();
class ScrollingGraphicalViewer
public void setEditDomain(EditDomain domain) {
super.setEditDomain(domain);
// Set the new event dispatcher, even if the new domain is null. This will dispose
// the old event dispatcher.
getLightweightSystem()
.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));
}
class LightweightSystem
public void setEventDispatcher(EventDispatcher dispatcher) {
this.dispatcher = dispatcher; //鍦ㄦShapes渚嬪瓙涓槸DomainEventDispatcher
dispatcher.setRoot(root);
dispatcher.setControl(canvas);
}
protected void addListeners() {
EventHandler handler = createEventHandler();
canvas.getAccessible().addAccessibleListener(handler);
canvas.getAccessible().addAccessibleControlListener(handler);
canvas.addMouseListener(handler);
canvas.addMouseMoveListener(handler);
canvas.addMouseTrackListener(handler);
canvas.addKeyListener(handler);
canvas.addTraverseListener(handler);
canvas.addFocusListener(handler);
canvas.addListener(SWT.MouseWheel, handler);
鈥︹?/P>
setEventDispatcher(getEventDispatcher());
}
class EventHandler
implements MouseMoveListener, MouseListener, AccessibleControlListener, KeyListener,
TraverseListener, FocusListener, AccessibleListener, MouseTrackListener,
Listener
{
鈥?/P>
public void keyPressed(KeyEvent e) {
//鍦ㄦShapes渚嬪瓙涓槸DomainEventDispatcher
getEventDispatcher().dispatchKeyPressed(e);
}
鈥?/P>
public void mouseDoubleClick(MouseEvent e) {
getEventDispatcher().dispatchMouseDoubleClicked(e);
}
鈥?/P>
public void mouseMove(MouseEvent e) {
getEventDispatcher().dispatchMouseMoved(e);
}
public void mouseUp(MouseEvent e) {
getEventDispatcher().dispatchMouseReleased(e);
}
鈥?/P>
}
榪欐牱銆佸湪鍥?/SPAN>A涓?/SPAN>Request鍙戦佸埌EditPart鏈哄埗鍋氫簡綆瑕佺殑鎺㈣銆?/SPAN>
瀛︿範浜?/SPAN>Tool浜х敓Request鐨勬満鍒訛紝鍙互甯姪鎴戜滑璋冭瘯GEF錛屽悓鏃跺鏋滃湪澶у鑷繁鐨勭▼搴忎腑闇瑕佹湁鏂扮殑UI浜や簰綾誨瀷錛屼篃鍙互璇曠潃寤虹珛鑷繁鐨?/SPAN>Tool綾諱駭鐢熸柊鐨?/SPAN>Request錛岃繖鏍峰湪鑷繁鐨?/SPAN>EditPart浜х敓瀵瑰簲鐨?/SPAN>Command,榪欐牱灝卞彲浠ュ鐞嗗疄鐜版柊鐨?/SPAN>UI浜や簰綾誨瀷銆?/SPAN>
鍦ㄤ笅涓綃囨垜浠帰璁ㄤ竴涓嬫湁鍏沖浘A涓殑EditPart濡備綍浜х敓Command錛屼互鍙婃墽琛?/SPAN>Command闂銆?/SPAN>
鍖呭惈GEF鐨凟ditor鍒涘緩鏃跺簭鍥?/STRONG>
浠?/SPAN>eclipse緗戠珯涓婁緥瀛?A >A Shape Diagram Editor涓轟緥
GEF濡傚悓鍏朵粬鐨勪竴浜?/SPAN>framework涓鏍鳳紝鏄竴涓鏉傚簽澶э紙鏈夌偣澶稿紶錛夌殑錛屽綋鎴戜滑鎯充嬌鐢ㄩ┚椹畠鏃訛紝灝卞繀欏誨叏闈㈢殑鐞嗚В鍏舵暣浣撴瀯鏋跺強鍏惰繍浣滆繃紼嬨傝繖闇瑕佹垜浠殑姣呭姏鍜屾晱閿愩傛梾閫斿紑濮嬩簡鈥?
GEF涓昏鐨勪換鍔℃槸閽堝2D鍥懼艦緙栬緫鎿嶄綔錛屽涓嬪浘銆?/SPAN>
涓轟簡浣?/SPAN>GEF鑳藉騫挎硾鐨勭敤浜庣綾葷箒澶?/SPAN>2D鍥懼艦緙栬緫棰嗗煙錛?/SPAN>GEF灝卞繀欏誨緩绔嬩竴涓弗鏍肩殑鏄撴墿鍏?/SPAN>/鏄撶粍鍚?/SPAN>/鏄撻噸鐢ㄧ殑MVC妗嗘灦錛堝綋鐒惰繖縐嶅垎瑙g粏鍖栧姛鑳藉璞$殑鏂規(guī)硶鎬濇兂錛屾垜浠彲浠ョ敤鍦ㄥ叾瀹冪殑鍦版柟錛屽叾瀹冮鍩熴佸叾浠栬璦濡?/SPAN>C#涓婏級銆?/SPAN>
閭d箞濡傛灉璁捐 榪欎釜 涓ユ牸鐨?/SPAN>MVC妗嗘灦(瀵逛簬Model鏄弗鏍肩殑鐙珛錛屽畠涓嶄緷璧栦笌View鍜?/SPAN>Controller) 浠ュ強 姝ゆ鏋?/SPAN> 濡備綍 杈懼埌 鏄撴墿鍏?/SPAN>/鏄撶粍鍚?/SPAN>/鏄撻噸鐢?/SPAN> 鐨勭壒鎬с備笅闈㈡垜鎸夌収鑷繁鎷欏姡鐨勬濊礬錛屼互楹婚泙涔嬬溂搴?/SPAN>楦塊泚涔嬪織鍟?IMG src="http://xdingding.cnblogs.com/Emoticons/emembarrassed.gif" align=absMiddle border=0>
瀵逛簬MVC涓?/SPAN>
View閮ㄥ垎錛?/SPAN>GEF鐞嗘墍褰撶劧瑕佷嬌鐢ㄨ嚜瀹剁殑涓滀笢Draw2D銆傚埄鐢?/SPAN>Draw2D鐨?/SPAN>Figuer浣滀負鑷繁鐨?/SPAN>View銆?/SPAN>
Model閮ㄥ垎錛?/SPAN>寰寰鍐呴儴鍖呭惈浜嗗崈宸竾鍒佷笉鍙鐭ョ殑鍟嗕笟淇℃伅銆傚洜姝ゃ?/SPAN>GEF妗嗘灦搴旇灝介噺鍑忓皯綰︽潫錛堝湪涓嬮潰灝嗚緇嗚鏄庣害鏉燂級銆?/SPAN>
Controller閮ㄥ垎錛?/SPAN>EditPart/Draw2D鐨?/SPAN>Figure/Model榪欎笁涓爲鐘跺璞℃ā鍨嬶紝鍦?/SPAN>EditPart涓皢寤虹珛浜嗕笌鍏跺搴旂殑Draw2D鐨?/SPAN>Figure/Model緇撶偣 寤虹珛涓涓鍏寵仈鐨勫叧緋匯?/SPAN>
榪欐牱浜х敓鐨勬瀯鏋跺涓嬶細
鎬濊冿細
涓轟粈涔?/SPAN>Controller瑕佸悓View涓鏍烽噰鐢ㄦ爲鐘剁粨鏋勫憿錛?/SPAN>
褰?/SPAN>Controller浠ユ爲鐘剁殑褰㈠紡瀛樺湪錛岃繖鏍蜂究浜庡姛鑳藉垎瑙o紙榪欎釜閬撶悊鏈夌偣鍍?/SPAN> 鍦ㄧ被璁捐涓?/SPAN> 澶嶅悎浼樹簬緇ф壙 涓鑸級
榪欐牱姣忎竴緇撶偣鐨?/SPAN>Controller(鍗?/SPAN>EditPart) 浠呴渶瑕佸鐞?/SPAN>
灝ゅ叾褰撶敤鎴烽渶瑕佸湪鍥懼艦鐣岄潰緙栬緫鐣岄潰涓紝闇瑕佷嬌鐢ㄥ縐嶄笉鍚?/SPAN>UI琛屼負瑙勫垯鐨?/SPAN>2D鍏冪礌錛堜緥濡備笉鍚岀殑褰㈢姸鍧楋紝涓嶅悓琛屼負鐨勮繛綰跨瓑錛夌粍鍚堟潵瀹屾垚宸ヤ綔鏃訛紙渚嬪綾諱技Visio榪欐牱鐨勭晫闈級錛岃繖縐嶆瀯鏋剁殑浼樺娍灝辨樉闇叉棤鐤戙?/SPAN>
鏈畬寰呯畫鈥?(涓嬮潰瑕佹帰璁ㄥ浣曚駭鐢熶笂榪頒笁涓爲鐘舵ā鍨嬬瓑銆?/SPAN>)
GEF瀛︿範絎旇錛堜竴錛?/SPAN> eclipse鐨?/SPAN>GEF鐩稿叧欏圭洰璇存槑
棣栧厛銆佹劅璋?A >鍏繘鍒?/A>鐨勮緵鍕ゅ姵鍔ㄥ拰濂夌尞銆傝繖鍑犲ぉ寮濮嬪GEF鍙戠敓鍏磋叮錛?A >鍏繘鍒剁殑GEF緋誨垪瀵規(guī)垜瀛﹁繖浜涚殑甯姪寰堝ぇ鍏ラ棬寰堝揩銆傝嚜宸變篃灝遍『鎵嬫妸鍛ㄦ湯瀛︿範鐨勪笢瑗胯褰曚笅鏉ャ傚府鍔╁悗鏉ュ浜恒傛垜浼氭妸榪欏嚑澶╂墍瀛﹂檰緇啓鍑哄笇鏈涘ぇ瀹舵敮鎸併傜洰鍓嶃佹鍦ㄤ負鍏繘鍒朵緥瀛愬彂鎰侊紝鎴戝NodePart澧炲姞浜?/SPAN>ResizeEditPolicy錛屼絾鏄笉鐭ヤ負浣曢紶鏍囨嫋鍔ㄦ椂鏈変釜鐏拌壊鐨勫尯鍩熷湪闅忕潃鍙樺寲錛屼絾榧犳爣閲婃斁鏃訛紝NodeFigure鐨勫昂瀵鎬笉鍙戠敓鍙樺寲錛屾槸鍚︽槸鍥犱負鍦?/SPAN>refreshVisuals涓浐鍖栦簡Size錛屼唬鐮佸涔犱腑鈥?
eclipse鐨?/SPAN>GEF鐩稿叧欏圭洰璇存槑銆?/SPAN>
鍚勯」鐩殑綆浠嬶細
Draw2D錛?/SPAN>寤虹珛浜?/SPAN>2緇寸殑鍥懼艦搴?/SPAN>(鏍戠姸鍥懼艦閮ㄤ歡Figure)錛岃礋璐f樉紺?/SPAN>2緇寸殑鍥懼艦灞曠ず銆?BR>
GEF錛?/SPAN> 錛?/SPAN>Graphical Editing Framework錛?/SPAN>寤虹珛鏍囧噯鐨?/SPAN>MVC鏋勬灦錛屼唬鐮佸埄鐢?/SPAN>Draw2D浣滀負鑷繁鐨?/SPAN>View閮ㄥ垎錛屼富瑕佷唬鐮佸疄鐜板鏉傜殑鏍戠姸(浜?/SPAN>Model鍒嗗埆瀵瑰簲) 鐨勬帶鍒跺櫒銆傚疄鐜扮殑妗嗘灦鍏鋒湁寰堥珮鐨勫彲澶嶇敤絳夌壒鎬э紝渚嬪錛氬皢鍥懼艦閮ㄤ歡鍔熻兘鍒嗚В涓哄涓?/SPAN>EditPolicy錛岃繖鏍蜂嬌鐢ㄨ呭彲浠ラ氳繃installEditPolicy鎺ュ彛鏉ュ畾鍒訛紝浠ュ強鎵╁厖鑷繁鐨勬煇涓鍔熻兘鐗瑰緛銆?/SPAN>
EMF: 錛?/SPAN>Eclipse Modeling Framework錛?/SPAN>棣栧厛鍦ㄤ竴涓交閲忕駭欏圭洰浠ュ強欏圭洰鍒濇湡寮鍙戯紝Model甯稿父閲囩敤鎷ユ湁Property鐨?/SPAN>Java瀵硅薄鏉ョ畝鍗曟槑浜嗚〃紺恒愬嵆 Plain Old Java Objects (POJOs)銆戙?/SPAN>EMF瀹氫箟浜嗕竴濂桬core鍏冩ā鍨嬶紝浣垮緱Model鍏鋒湁鏄撲簬緇存姢銆佹槗浜庢墿鍏呫佹槗浜庢暟鎹氦鎹㈢瓑鐗規(guī)х殑Model Framwork銆傚洜姝ゃ佸湪瀹為檯涓ぇ鍨嬬殑欏圭洰涓線寰浼氶噰鐢?/SPAN>Draw2D錛?/SPAN>GEF錛?/SPAN>EMF鐨勬柟寮忔潵瀹炵幇鏁翠綋鐨?/SPAN>MVC妯″紡銆備緥濡傦細ROSE鐨勬渶鏂扮増鏈?/SPAN> IBM.Rational.Software.Architect灝辨槸閲囩敤浜嗚繖縐嶆瀯鏋躲?/SPAN>
GMF錛?/SPAN> 錛?/SPAN>Graphical Modeling Framework 錛?/SPAN>浣跨敤浜?/SPAN>GEF鍜?/SPAN>EMF錛屽緩绔嬩簡涓や釜涔嬮棿鐨勬ˉ姊佹鏋訛紝鍚屾椂瀹炵幇浜嗕竴浜涢鍩熶笂鐨勫吀鑼冨簲鐢紝濡?/SPAN>UML鍥撅紝鐢樼壒鍥撅紝鑴戝浘絳夈傦紙欏圭洰姝e湪榪涜涓繖浜涘姛鑳借繕鏈畬澶囥傚彲浠ョ敤鏉ュ弬鑰冧互瀹炵幇鑷繁鐨勪竴涓爣鍑嗙殑GEF錛?/SPAN>EMF鐨勫簲鐢級銆?/SPAN>
鍚勯」鐩緷璧栧叧緋伙細
濡備笂鍥撅細浣跨敤鑰呭彲浠ユ湁浠ヤ笅鍑犵鐢ㄦ硶錛?/P>
EMF: Model綆$悊灞?/SPAN>
Draw2D: 浜岀淮鍥懼艦灞曠幇
Draw2D 錛?/SPAN> GEF: 浜岀淮鍥懼艦鐨勭畝鍗曠紪杈戞ā鍧?/SPAN>
Draw2D 錛?/SPAN> GEF 錛?/SPAN> EMF錛?/SPAN> 浜岀淮鍥懼艦鐨勭紪杈戞ā鍧?/SPAN>
Draw2D 錛?/SPAN> GEF 錛?/SPAN> EMF 錛?/SPAN> GMF錛氬熀浜?/SPAN>GMF鎻愪緵鐨勫浘褰㈢紪杈戝姛鑳戒箣涓婃墿灞?BR>