1銆?nbsp;棣栧厛瑕佸疄鐜癊ditPartFactory鎺ュ彛鈥斺擡ditPartFactoryOutlineImp錛岃鎺ュ彛涓篛utline瑙嗗浘鎻愪緵鎺у埗鍣‥ditPart瀵硅薄錛屾敞鎰忚EditPartFactoryImp瑕佷笌緙栬緫瑙嗗浘鈥斺斿嵆鐪熸鐨勭紪杈戝尯鐨凟ditPartFactory鎺ュ彛瀹炵幇綾籔artFactoryEditAreaImp淇濇寔涓鑷達紝鍚﹀垯鏃犳硶鍚屾緙栬緫鍖轟笌Outline鐨勫悓姝ャ傚綋鐒訛紝騫朵笉鏄紪杈戝尯鐨勬墍鏈夊厓绱犻兘搴斿弽搴斿埌Outline瑙嗗浘涓紝榪欒鏍規(guī)嵁鑷繁鐨勯渶瑕佸湪EditPartFactoryOutlineImp鍒涘緩EditPart瀵硅薄銆?br />
2銆?nbsp;Outline瑙嗗浘涓殑鏍戞帶鍒跺櫒鐨勬瀯寤猴細闇瑕佸疄鐜癊ditPartFactory鎺ュ彛鈥斺擳reePartFactory錛屽疄鐜皃ublic EditPart createEditPart(EditPart context, Object model)鏂規(guī)硶錛屽湪璇ユ柟娉曢噷涓烘瘡涓粨鐐光斺攎odel鍒涘緩鍏跺瓙妯″瀷鐨勬爲妯″瀷銆侽utline鐨勬爲緇撴瀯鐨勬牴緇撶偣搴旇鍦ㄧ紪杈戝尯鐨勨斺擥raphicalEditorWithFlyoutPalette緇ф壙綾葷殑鍐呴儴綾籆ontentOutlinePage緇ф壙綾葷殑public void createControl(Composite parent)鏂規(guī)硶涓繘琛屽垱寤猴紝閫氳繃getViewer().setContents(model)鏂規(guī)硶灝嗘牴妯″瀷娉ㄥ叆Outline瑙嗗浘涓?br />
鍙﹀錛屼負浜嗙淮鎶utline鐨勬爲錛岄渶瑕佺戶鎵緼bstractTreeEditPart錛屽強瀹炵幇PropertyChangeListener鎺ュ彛錛屼富瑕侀渶瑕侀噸杞芥垨瀹炵幇鐨勪竴浜涙柟娉曚負錛?/p>
//姝ゆ柟娉曡礋璐e鐞嗙敱浜庨紶鏍囬変腑鎴栨洿鏀瑰鏍戦犳垚鐨勫彉鍖栵紝瀵規(guī)爲緇撴瀯榪涜鍒鋒柊
public void propertyChange(PropertyChangeEvent evt)
//鏍戠粨鐐圭殑鍥炬爣
protected Image getImage()
//鏍戠粨鐐圭殑鏂囨湰
protected String getText()
//璇ユ柟娉曡礋璐e鐞嗙敱浜庨紶鏍囬変腑鎴栧叾浠栦簨浠舵縺媧繪煇鏍戠粨鐐硅鍋氱殑浜嬫儏錛屽鏋滀負璇ユ爲緇撶偣娣誨姞PropertyChangeListener銆?nbsp;
public void activate()
//涓庝笂闈㈢殑鏂規(guī)硶鐩稿弽
public void deactivate()
//寰楀埌褰撳墠鏍戠粨鐐圭殑妯″瀷
protected List getModelChildren()

琛ュ厖璧勬枡錛?br />
鍦‥clipse 閲岋紝褰撶紪杈戝櫒錛圗ditor錛夎嬋媧繪椂錛屽ぇ綰茶鍥捐嚜鍔ㄩ氳繃榪欎釜緙栬緫鍣ㄧ殑getAdapter()鏂規(guī)硶瀵繪壘瀹冩彁渚涚殑澶х翰錛堝ぇ綰插疄鐜癐contentOutlinePage 鎺ュ彛錛夈侴EF 鎻愪緵浜咰ontentOutlinePage 綾葷敤鏉ュ疄鐜板ぇ綰茶鍥撅紝鎴戜滑瑕佸仛鐨勫氨鏄疄鐜頒竴涓畠鐨勫瓙綾伙紝騫墮噸鐐瑰疄鐜癱reateControl()鏂規(guī)硶銆侰ontentOutlinePage 鏄痮rg.eclipse.ui.part.Page 鐨勪竴涓瓙綾伙紝澶х翰瑙嗗浘鍒欐槸PageBookView 鐨勫瓙綾伙紝鍦ㄥぇ綰茶鍥句腑鏈変竴涓狿ageBook錛屽寘鍚簡寰堝Page 騫跺彲浠ュ湪瀹冧滑涔嬮棿鍒囨崲錛屽垏鎹㈢殑渚濇嵁灝辨槸褰撳墠媧誨姩鐨凟ditor銆傚洜姝わ紝鎴戜滑鍦╟reateControl()鏂規(guī)硶閲岃鍋氱殑灝辨槸鏋勯犺繖涓狿age錛岀畝鍖栧悗鐨勪唬鐮佸涓嬫墍紺猴細
private Control outline;

public OutlinePage()
{
super(new TreeViewer());
}

public void createControl(Composite parent)
{
outline = getViewer().createControl(parent);
getSelectionSynchronizer().addViewer(getViewer());
getViewer().setEditDomain(getEditDomain());
getViewer().setEditPartFactory(new TreePartFactory());
getViewer().setContents(getDiagram());
}

鐢變簬鎴戜滑鍦ㄦ瀯閫犳柟娉曢噷鎸囧畾浜嗕嬌鐢ㄦ爲緇撴瀯鏄劇ず澶х翰錛屾墍浠reateControl()閲岀殑絎竴鍙ュ氨浼氫嬌outline 鍙橀噺寰楀埌涓涓猅ree錛堣org.eclipse.gef.ui.parts.TreeViewer 鐨勪唬鐮侊級錛岀浜屽彞鎶奣reeViewer 鍔犲埌閫夋嫨鍚屾鍣ㄤ腑錛屼粠鑰岃鐢ㄦ埛涓嶈鍦ㄥぇ綰叉垨緙栬緫鍖哄煙閲岄夋嫨EditPart 鏃訛紝鍙︿竴鏂歸兘鑳借嚜鍔ㄥ仛鍑哄悓鏍風(fēng)殑閫夋嫨錛涙渶鍚庝笁琛岀殑浣滅敤鍦ㄤ互鍓嶇殑甯栧瓙閲岄兘鏈変粙緇嶏紝鎬諱綋鐩殑鏄妸澶х翰瑙嗗浘鐨勬ā鍨嬩笌緙栬緫鍖哄煙鐨勬ā鍨嬭仈緋誨湪涓璧鳳紝榪欐牱錛屽浜庡悓涓涓ā鍨嬫垜浠氨鏈変簡涓や釜瑙嗗浘錛屼綋浼氬埌MVC 鐨勫ソ澶勪簡鍚с?br />
瀹炵幇澶х翰瑙嗗浘鏈閲嶈鐨勫伐浣滃熀鏈氨鏄繖浜涳紝浣嗚繕娌℃湁瀹岋紝鎴戜滑瑕佸湪init()鏂規(guī)硶閲岀粦瀹歎NDO/REDO/DELETE 絳夊懡浠ゅ埌Eclipse 涓葷獥鍙o紝鍚﹀垯褰撳ぇ綰茶鍥懼浜庢椿鍔ㄧ姸鎬佹椂錛屼富宸ュ叿鏉′笂鐨勮繖浜涘懡浠ゅ氨浼氬彉涓轟笉鍙敤鐘舵侊紱鍦?getControl()鏂規(guī)硶閲岃榪斿洖鎴戜滑鐨刼utline 鎴愬憳鍙橀噺錛屼篃灝辨槸鎸囧畾璁╄繖涓帶浠跺嚭鐜板湪澶х翰瑙嗗浘涓紱鍦╠ispose()鏂規(guī)硶閲屽簲璇ユ妸榪欎釜TreeViewer 浠庨夋嫨鍚屾鍣ㄤ腑縐婚櫎錛涙渶鍚庯紝蹇呴』鍦≒racticeEditor 閲岃鐩杇etAdapter()鏂規(guī)硶錛屽墠闈㈣榪囷紝榪欎釜鏂規(guī)硶鏄湪Editor 嬋媧繪椂琚ぇ綰茶鍥捐皟鐢ㄧ殑錛屾墍浠ュ湪榪欓噷蹇呴』鎶婃垜浠疄鐜板ソ鐨凮utlinePage 榪斿洖緇欏ぇ綰茶鍥句嬌鐢紝浠g爜濡備笅錛?/p>

public Object getAdapter(Class type)
{
if (type == IContentOutlinePage.class)
return new OutlinePage();
return super.getAdapter(type);
} 

]]>