java學(xué)習(xí)軟件rcp自學(xué)教程_第1頁
java學(xué)習(xí)軟件rcp自學(xué)教程_第2頁
java學(xué)習(xí)軟件rcp自學(xué)教程_第3頁
java學(xué)習(xí)軟件rcp自學(xué)教程_第4頁
java學(xué)習(xí)軟件rcp自學(xué)教程_第5頁
已閱讀5頁,還剩153頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目錄1.富客戶端平臺11.1.概述11.2.EclipseRCP12.創(chuàng)建你的第一個(gè)RCP程序 12.1.創(chuàng)建一個(gè)RCP程序 22.2.啟動(dòng)你的RCP程序 52.3.應(yīng)用程序VS產(chǎn)品 63.應(yīng)用程序里的插件ID 74.Actions的用法(菜單和) 74.1.概述 74.2.通過編碼添加 84.3.由“擴(kuò)展”方式向程序添加菜單和5.添加組合鍵 5.1.概述 5.2.a(chǎn)ctions的組合鍵 6.系統(tǒng)托盤 7.外觀 7.17.27.3VIEW里添加action8.和編輯器一起工作8.1.概述8.2.創(chuàng)建工程 8.3.創(chuàng)建并準(zhǔn) 模型 8.4.在視口中使 模型 8.5.加入編輯器 8.6.調(diào)用編輯器 8.7.向編輯器提供內(nèi)容 框 9.1概述 9.2.預(yù)定義的框9.2.19.2.29.2.3.a(chǎn)ction9.2.4.調(diào)用框9.3.用戶自定義框9.3.19.3.2.創(chuàng)建工程 9.3.3.a(chǎn)ction 9.3.4.a(chǎn)ction 9.3.5.創(chuàng)建框 10.1.概述 10.2.例子 11.1首選項(xiàng) 11.3.首選項(xiàng)頁 添加狀態(tài)條 安裝狀態(tài)條 共享狀態(tài)條 ··13. 向你的程序中添加 13.2.使可選。 13.2.1.使可由一個(gè)coolbar可選 13.2.2.使可通過菜單選擇。 14.進(jìn)度報(bào)告 15.將外部類包含進(jìn)你的程序 15.1.概述 15.2.向構(gòu)建路徑中添加jar 15.3.使jar在你的運(yùn)行路徑里有效 16.提示和策略 16.1.控制臺日志 16.2.保存用戶的布局 16.3.獲得disy 16.4.使用eclipse的“保存”action 16.5.裝載模型 16.6.向你的程序添加錯(cuò)誤日志視口 17.制造一個(gè)產(chǎn)品 17.1.概述 17.2.創(chuàng)建一個(gè)工程 17.3.測試你的產(chǎn)品 18.商標(biāo) 18.1.歡迎頁面 18.2.商標(biāo) 18.3.風(fēng)格化launcher 19.發(fā)布你的產(chǎn)品 20.發(fā)布引入外部jar的產(chǎn)品 20.1.整合外部jar和第庫 Tip 21.1.創(chuàng)建一個(gè)新工程 21.2.創(chuàng)建一個(gè)產(chǎn)品 21.3.添加依賴性 21.4.向程序中添加 21.5.創(chuàng)建一個(gè)幫助插件工程////原著寫的不好 22.附錄:配置文件 22.1.概述 22.2..project 23.附錄:使用接術(shù) 23.2.Jface 富客戶端平概Eclipse對ECLIPSERCPRCP需要:一個(gè)、、工作空間顧問是個(gè)不可見的技術(shù)元件,它控制程序的外形(菜單等等對RCP、、名為“plugin.xml一個(gè)RCP程序繼承了類org.eclipse.core.runtime.application。它相當(dāng)于主程序。是繼承了org.eclipse.ui..同時(shí)還需要另兩個(gè)中心插件:org.eclipse.core.runtimeEclipseRCP建設(shè)風(fēng)格——插件,擴(kuò)展和擴(kuò)展possibilitiesforfunctionalitycontributions(codeandnon-code)byotherplug-ins.Non-codefunctionalitycontributionsareforexampletheprovisionofhelpcontent.的插件或不同的插件OSGIALLIANCE的eclipse運(yùn)行時(shí)環(huán)境被用到的擴(kuò)展和提供的擴(kuò)展點(diǎn)都在plugin.xmlPDE(插件開發(fā)環(huán)境)里被很好的編輯eclipseRCPECLIPSE創(chuàng)建你的第一個(gè)RCP程RCP創(chuàng)建一個(gè)RCP程在ECLIPSEFileNewProjectPLUG-INRCPMyFirstRCP”Plug-in 選擇“oRCP”模branding一個(gè)工程結(jié)構(gòu)被創(chuàng)建好了??匆豢床贿@些不同的JAVA啟動(dòng)你的RCP程estinglaunchanEclipseApplication,或者“plugin.xml”文件。選擇“runas”->“ecpliseapplication”RCP應(yīng)用程序VS產(chǎn)APPLICTIONjavalaunch選擇你的plugin.xml->Runas->OpenRun這個(gè)例子里,運(yùn)行產(chǎn)品。試著也運(yùn)行應(yīng)用程序。首先工作空間數(shù)據(jù)加載應(yīng)該被設(shè)置這里PDE將創(chuàng)建 和所有需要的文件以運(yùn)行你的RCP應(yīng) forconfirmation”flag應(yīng)用程序里的插件插件ID通常被用在幾個(gè)地方,所以最好在應(yīng)用程序類里把它為靜態(tài)。這個(gè)ID必須與定義plugin.xml里的ID一樣。IDRCP應(yīng)用程序調(diào)用MyFirstRCPApplication.java里添加以下publicstaticfinalStringPLUGIN_ID=Actions的用法(菜單和概在ECLIPSE里,是由actions來描述菜單及的你有兩種方法向你的應(yīng)用程序里添加菜單和2.?dāng)U展如果是第法,利用ApplicationActionBarAdvisor類的makeActions()聲名actions。你可以利用方法fillBar()或者fillCoolBar()向你的程序添加菜單或者coolbar。如果你用第二種方法,將使用ECLIPSE向?qū)б詳U(kuò)展點(diǎn)形式創(chuàng)建ACTIONS通過編碼添創(chuàng)建新工程“Test”使用“oRCP”模板打開ApplicationActionBarAdvisor.java做如下更改 importorg.eclipse.jface.action.I importorg.eclipse.jface.action. importorg.eclipse.jface.action.Separator;importorg.eclipse.ui.IWorkbenchActionConstants;importorg.eclipse.ui.IWorkbenchWindow;importimportimportimportpublicclassApplicationActionBarAdvisorActionBarAdvisorprivateIWorkbenchActioniExitAction;privateIWorkbenchActioniAboutAction;privateIWorkbenchActioniNewWindowAction;privateIWorkbenchActioniSaveAction;configurer)

public}protectedvoidmakeActions(IWorkbenchWindowwindow){iExitAction=ActionFactory.QUIT.create(window);iSaveAction=ActionFactory.SAVE.create(window);iAboutAction=ActionFactory.ABOUT.create(window);iNewWindowAction=}protectedvoidfill Bar){Manager = Managerhelp =new // .add(newSeparator()); // }現(xiàn)在,通過方法fillCoolBar()方法,向ApplicationActionBarAdvisor.java添加,代碼如下:這里要用到Jface先將swt包倒入protectedvoidfillCoolBar(ICoolBarManager//ThiswilladdanewtoolbartotheIToolBarManagertoolbar=newToolBarManager(SWT.FLAT|SWT.RIGHT);coolBar.add(newToolBarContributionItem(toolbar,"main"));//Addtheentrytothetoolbar}publicvoidpreWindowOpen()IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();configurer.setInitialSize(newPoint(400,300));configurer.setShowCoolBar(true);//Changedtotrue oRCP");}由“擴(kuò)展”方式向程序添加創(chuàng)建一個(gè)新工程,命名為“Extensionest,使用“oRCP”模板。configurer.setShowCoolBar(true),以激活package importimportimportorg.eclipse.ui.application.IActionBarConfigurer;importorg.eclipse.ui.application.IWorkbenchWindowConfigurer;importorg.eclipse.ui.application.WorkbenchWindowAdvisor;publicclassApplicationWorkbenchWindowAdvisorWorkbenchWindowAdvisorpublicconfigurer)}publicActionBarAdvisorcreateActionBarAdvisor(IActionBarConfigurerconfigurer){returnnew}publicvoidpreWindowOpen()IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();configurer.setInitialSize(newPoint(400,300)); o}}點(diǎn)擊Add…彈出NewExtension窗口,選擇org.eclipse.ui.actionSets擴(kuò)展點(diǎn),點(diǎn)擊完成右鍵右鍵org.eclipse.ui.actionSets選擇new-extension,選擇extensionwisards,選擇第一項(xiàng) WorldActionset,next,finish,之后出現(xiàn)上圖所示。為你的新action添加數(shù)據(jù):label是顯示在用戶接口上的文字,要使action可見在菜單或者可見運(yùn)行程序,將顯示有菜單和,點(diǎn)擊action,將談出消息框“thechosenoperationisnotcurrentlyavailable”提示操作不可用。這是因?yàn)槲覀冞€沒有定義接有action接口行為的類。Actions由擴(kuò)展so-calledlasy-loadingprinciple這表明類是在需要的時(shí)候才被加載。Thedefinitionoftheclassisdoneviatheextensionbuttherealjavaclassisonlyloadedthefirsttimetheextensionisactivated回到plugin.xml的擴(kuò)展,修改類名“extension est.Myxtensinction,使用方法run為擁護(hù)創(chuàng)建一個(gè)的消息package importimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.swt.widgets.S importimportpublicclassMyExtensionActionIWorkbenchWindowActionDelegateprivate publicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)//TODOAuto-generatedmethodstub =window.getS }publicvoidrun(IActionaction){ ,"Information","Imaginehereapowerfulwizardwithlotsofgraphics!");}publicvoidselectionChanged(IActionaction,ISelectionselection){//TODOAuto-generatedmethod}}添加組合概 mandsaredeclarativecomponentsandnotrelatedtotheimplementationofanaction.對預(yù)定義actions由ActionFactory定義的請看一下ActionFactory類,andtheninclassesthecreationoftheindividualelements,例如,QuitAction。這些類使用的setActionDefinitionId必須“estKeybinding,oaction,oAction,packageimportorg.eclipse.jface.action.IAction;importorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.swt.widgets.S importimportpublic oActionIWorkbenchWindowActionDelegateprivate publicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)//TODOAuto-generatedmethod}

publicvoidrun(IActionaction)//TODOAuto-generatedmethodstub ,"Information","Imaginehereapowerfulwizardwithlotsof}publicvoidselectionChanged(IActionaction,selection)//TODOAuto-generatedmethod}}選擇plugin.xml文件,在“擴(kuò)展”里,添加“ mand1, 指Ctrl鍵CommandCommand系統(tǒng)托接下來添加一個(gè)系統(tǒng)托盤圖標(biāo)。如果窗口最小化,程序?qū)⒃谌蝿?wù)面欄上不可見(只有通過任務(wù)oRCP oRCP“rayest, 模packageimportpublicclassApplicationimplementsIApplicationpublicstaticfinalStringPLUGIN_ID=packageimport importimportorg.eclipse.swt.events.S importorg.eclipse.swt.events.S importorg.eclipse.swt.graphics.Image;importorg.eclipse.swt.graphics.Point;importorg.eclipse.swt.widgets.Event;importorg.eclipse.swt.widgets.Listener;importorg.eclipse.swt.widgets. importorg.eclipse.swt.widgets.S importorg.eclipse.swt.widgets.Tray;importimportimportimportorg.eclipse.ui.application.IActionBarConfigurer;importorg.eclipse.ui.application.IWorkbenchWindowConfigurer;importorg.eclipse.ui.application.WorkbenchWindowAdvisor;importorg.eclipse.ui.plugin. publicclassApplicationWorkbenchWindowAdvisorWorkbenchWindowAdvisorprivateTrayItemprivateImageprivateIWorkbenchWindowpublicApplicationActionBarAdvisorpublicApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurerconfigurer){}publicActionBarAdvisorcreateActionBarAdvisor(IActionBarConfigurerconfigurer){actionBarAdvisor=newreturn}publicvoidpreWindowOpen()IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();configurer.setInitialSize(newPoint(400,300));}publicvoidpostWindowOpen()window=getWindowConfigurer().getWindow();trayItem=initTaskItem(window);if(trayItem//Thefollowingcodingwillwilltheprogramiftheprogramis//Notalwaysdesired//Createexitandaboutactionontheicon }}privatevoid (IWorkbenchWindowwindow2) Detect,newpublicvoidhandleEvent(Eventevent){Managertray =new =tray }}privatevoidcreateMinimize() Listener(new publicvoids Evente){ }trayItem.addListener(SWT.DefaultSelection,newpublicvoidhandleEvent(Eventevent){ =window.getS if(!s }}}privateTrayIteminitTaskItem(IWorkbenchWindowwindow)finalTraytray=window.getS TrayItemtrayItem=newTrayItem(tray,SWT.NONE);trayImage= returntrayItem;}publicvoidif(trayImage!=null){}}}packageimport importorg.eclipse.jface.action. importorg.eclipse.ui.IWorkbenchWindow;importorg.eclipse.ui.actions.ActionFactory;importimportimportpublicclassApplicationActionBarAdvisorextendsActionBarAdvisorprivateIWorkbenchActionprivateIWorkbenchActionpublicApplicationActionBarAdvisor(IActionBarConfigurerconfigurer)}protectedvoidmakeActions(IWorkbenchWindowwindow){exitAction=ActionFactory.QUIT.create(window);aboutAction=ActionFactory.ABOUT.create(window);}protectedvoid Bar)}publicvoidfillTrayItem( Managertray ){ }}外向程序中添加視圖模 oRCP”模選擇plugin.xml文件,在擴(kuò)展里,點(diǎn)擊“Add”按鈕,選擇“extensionwizard”,為新VIEW更改IDviewtemtetest.views.MyTempackageviewtemimportimportorg.eclipse.ui.IpublicclassimplementsIFactorypublicvoidcreateInitialLayout(IPageLayoutlayout)IPageLayout.RATIO_MAX,}}在在 向應(yīng)用程序添加“Viewest,修改IDViewTest.MyNewViewviewtest.MyNewView創(chuàng)建一個(gè)view的新類,點(diǎn)擊classpackageimportimportorg.eclip importorg.eclipse.swt.widgets.Text;importorg.eclipse.ui.part.Vie publicclassMyNewViewextends rtpublicMyNewView()//TODOAuto-generatedconstructor}publicvoidcreatePartControl(Compositeparent)//TODOAuto-generatedmethodTexttext=newText(parent,text.setText("Imagineafantasticuser}publicvoidsetFocus()//TODOAuto-generatedmethod}}在.java里添加Viewpackageviewtest;importorg.eclipse.ui.IPageLayout;importorg.eclipse.ui.IFactory;publicclassimplementsIFactorypublicvoidcreateInitialLayout(IPageLayoutlayout)layout.addView("ViewTest.MyNewView",IPageLayout.TOP,}}VIEW里添加除了可以向程序添加菜單/VIEWactionVIEW的數(shù)據(jù),因此你可以在你的action里直接使用VIEW數(shù)據(jù)使用“oRCP”模板創(chuàng)建一個(gè)新工程“AddActiontoView”雙擊plugin.xml,選擇“擴(kuò)展”點(diǎn)擊“Add”按鈕,選擇“Extensionwizard”。選擇SampleView,用以下設(shè)定創(chuàng)建樣本視然后add->new選擇你新視圖的代碼,加入識別IDpublicclassSampleViewextendsViertpublicstaticfinalStringprivateTableViewerprivateActionprivateActionprivateAction將VIEW加入你的RCP程序中:選擇.java,數(shù)據(jù)代碼packageimportimportorg.eclipse.ui.IimportpublicclassimplementsIFactorypublicvoidcreateInitialLayout(IPageLayoutlayout){StringeditorArea=layout.getEditorArea();layout.addView(SampleView.ID,IPageLayout.LEFT,0.60f,}}現(xiàn)在我們已經(jīng)準(zhǔn)備好一切向這個(gè)VIEW添加ACTION了,這是我們這一章的目的所在再次選擇plugin.xml的“Extensions”點(diǎn)擊“Add現(xiàn)在是最重要的了,將targerID改為你早先創(chuàng)建的view名稱。targetID是viewactionview之間的viewaction>action 和toolbarPath barPath或者toolbarPath,你的action將不被顯示在菜單或者內(nèi)。這里我也同樣修改了action的名字為“addactiontoview.action.PrintAction”再次運(yùn)行你的程序菜單和里出現(xiàn)action了如果你點(diǎn)擊action你將得到一個(gè)彈出你的創(chuàng)建你所指定的類,下面這段代碼將是actionpackageimportimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.ui.IViewActionDelegate;importorg.eclipse.ui.IVie importpublicclassPrintActionimplementsIViewActionDelegate{SampleViewmyView;publicvoidinit(IViertview)//TODOAuto-generatedmethodthis.myView=(SampleView)}publicvoidrun(IActionaction)//TODOAuto-generatedmethodstub"Verywell,youdidit,youdidaddanactiontothisview.Youaremyhero!");}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}action和編輯器一起概創(chuàng)建工使用“RCPapplicationwithview創(chuàng)建并準(zhǔn) 模創(chuàng)建一個(gè)包 。在包里建一個(gè)新類package importpublicclassContentextendsArrayListpublicclass privateStringfirstName;privateStringlastName; (StringfirstName,StringlastName)this.firstName=this.lastName=}publicStringgetFirstName()return}publicvoidsetFirstName(StringfirstName)this.firstName=}publicStringgetLastName()return}publicvoidsetLastName(StringlastName)this.lastName=}}privateArrayList<>s=newArrayList<publicContent()//Justfortestingwehard-codetheshere:s.add(new("Lars","Vogel"));s.add(new("Jim",}publicObject[]toArray()return}}創(chuàng)建一個(gè)新包packageimport importorg.eclipse.jface.viewers.IStructuredContentProvider;importorg.eclipse.jface.viewers.Viewer;publicclassMyContentProviderimplementsIStructuredContentProviderprivateContentpublicMyContentProvider(){content=newContent();}publicObject[] ements(Object ement)//TODOAuto-generatedmethodstubreturncontent.toArray();}publicvoiddispose()//TODOAuto-generatedmethod}publicvoidinputChanged(Viewerviewer,ObjectoldInput,ObjectnewInput)//TODOAuto-generatedmethod}}MyLabelrovierpackageimport importimportimportorg.eclipse.swt.graphics.Image;importorg.eclipse.ui.ISharedImages;importorg.eclipse.ui. publicclassMyLabelProviderimplementsILabelProviderpublicImagegetImage(Objectelement) }publicStringgetText(Objectelement)= )return }publicvoidaddListener(ILabelProviderListenerlistener)//TODOAuto-generatedmethod}publicvoiddispose()//TODOAuto-generatedmethod}publicbooleanisLabelProperty(Objectelement,Stringproperty)//TODOAuto-generatedmethodreturn}publicvoidremoveListener(ILabelProviderListenerlistener)//TODOAuto-generatedmethod}}在視口中使 模改變VIEW,使用你新的contentpackageimportimportimport import importimportpublicclassViewextends rtpublicstaticfinalStringID=privateTableViewerThisisacallbackthatwillallowustocreatetheviewerandpublicvoidcreatePartControl(Compositeparent)viewer=newTableViewer(parent,SWT.MULTI||viewer.setContentProvider(newMyContentProvider());viewer.setLabelProvider(newMyLabelProvider());}Passingthefocusrequesttotheviewer'spublicvoidsetFocus(){}}加入編輯雙擊plugin.xml選擇“Extension”。加入擴(kuò)展org.eclipase.ui.editors。不要使用模板。使用IDrerMrclass點(diǎn)擊class超連接以創(chuàng)建一個(gè)類,這個(gè)ID非常重要,稍后用它來指示一個(gè)packageimportimportimportorg.eclipse.swt.layout.GridLayout;importorg.eclip importorg.eclipse.swt.widgets.Label;importorg.eclipse.swt.widgets.Text;importorg.eclipse.ui.IEditorInput;importorg.eclipse.ui.IEditorSite;importimportpublicclassMyNameEditorextendsEditorPartpublicstaticfinalStringID=publicMyNameEditor()//TODOAuto-generatedconstructor}publicvoiddoSave(IProgressMonitormonitor)//TODOAuto-generatedmethod}publicvoiddoSaveAs()//TODOAuto-generatedmethod}publicvoidinit(IEditorSitesite,IEditorInputthrowsPartInitException{}publicbooleanisDirty()//TODOAuto-generatedmethodstubreturnfalse;}publicbooleanisSaveAsAllowed()//TODOAuto-generatedmethodreturn}publicvoidcreatePartControl(Compositeparent){GridLayoutlayout=newGridLayout();layout.numColumns=2;Labellabel1=newLabel(parent,SWT.BORDER);label1.setText("FirstName");Texttext1=newText(parent,SWT.BORDER);Labellabel2=newLabel(parent,SWT.BORDER);label2.setText("LastName");Texttext2=newText(parent,}publicvoidsetFocus()//TODOAuto-generatedmethod}}IeditorInputItshouldnotcontainthemodel.Wecoverthislater(viaviewandeditorlinking).packageimportimportimportpublicclassMyNameEditorInputimplementsIEditorInputprivatefinalStringpublicMyNameEditorInput(Stringlastname)this.lastname=}publicbooleanexists()//TODOAuto-generatedmethodreturn}publicImageDescriptorgetImageDescriptor()//TODOAuto-generatedmethodreturn}publicStringgetName()return}publicIPersistableElementgetPersistable()//TODOAuto-generatedmethodreturn}*@seepublicStringgetToolTipText()return"MyTool}publicObjectgetAdapter(Classadapter)//TODOAuto-generatedmethodreturn}publicbooleanequals(Objectobj)if(super.equals(obj))return}if(objinstanceofMyNameEditorInput)returnlastname.equals(((MyNameEditorInput)}return}publicinthashCode()return}}調(diào)用編輯packageimportmy.Content.importimportorg.eclipse.jface.viewers.DoubleClickEvent;importorg.eclipse.jface.viewers.IDoubleClickListener;importorg.eclipse.jface.viewers.ISelection;importimportimportimport importimportorg.eclipse.ui.IWorkbenchPage;importorg.eclipse.ui.PartInitException;importorg.eclipse.ui.tformUI;importorg.eclipse.ui.part.Viert;importeditortest.contentProvider.MyContentProvider;importeditortest.contentProvider.MyLabelProvider;importeditortest.editors.MyNameEditor;importpublicclassViewextends rtpublicstaticfinalStringID=privateActiondoubleClickAction;privateTableViewerviewer;privateIViewSiteviewSite;ThisisacallbackthatwillallowustocreatetheviewerandpublicvoidcreatePartControl(Compositeparent){viewSite=getViewSite();viewer=newTableViewer(parent,SWT.MULTI||viewer.setContentProvider(newMyContentProvider());viewer.setLabelProvider(newMyLabelProvider());//New}Passingthefocusrequesttotheviewer'spublicvoidsetFocus()}//privatevoidhookDoubleClickAction(){viewer.addDoubleClickListener(newIDoubleClickListener(){publicvoiddoubleClick(DoubleClickEventevent){}}//privatevoidcontributeActions()doubleClickAction=newAction()publicvoidrun()ISelectionselection=viewer.getSelection();Objectobj=((IStructuredSelection)selection)=()MyNameEditorInputinput=newIWorkbenchPagepage=trypage.openEditor(input,}catch(PartInitExceptione)}}}}向編輯器提供內(nèi)observerpatternpattern和MyNameEditor.java9.9.1概Eclipse提供了幾種預(yù)定義的框:Eclipse同時(shí)也支持用戶自定義的框。通過繼承類TitleAreaDialog得到新的框預(yù)定義的概接下來將描述如何使用預(yù)定義的框創(chuàng)建工使用“oRCP”模板創(chuàng)建一個(gè)新工程action添加一個(gè)action“OpenDialogAction”給菜單或者,為這個(gè)action創(chuàng)建一個(gè)調(diào)用在CallStandardDialog里使用如下代碼調(diào)用一個(gè)標(biāo)準(zhǔn)packageimportimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.swt.graphics.FontData;importorg.eclipse.swt.graphics.RGB;importorg.eclipse.swt.widgets.ColorDialog;importorg.eclipse.swt.widgets.DirectoryDialog;importorg.eclipse.swt.widgets.FileDialog;importorg.eclipse.swt.widgets.FontDialog;importorg.eclipse.ui.IWorkbenchWindow;importpublicclassCallStandardDialogimplementsIWorkbenchWindowActionDelegateprivateIWorkbenchWindowpublicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)this.window=}publicvoidrun(IActionaction)//FilestandardFileDialogfileDialog=new //Setthetext//Setfilteron.txtfilesfileDialog.setFilterExtensions(newString[]{"*.txt"});//PutinareadablenameforthefilterfileDialog.setFilterNames(newString[]{"Textfiles(*.txt)"});//OpenDialogandsaveresultofselectionStringselected=fileDialog.open();//DirectlystandardDirectoryDialogdirDialog=newDirectoryDialog(window.getS());dirDialog.setText("Selectyourhomedirectory");StringselectedDir=//SelectFontDialogfontDialog=newFontDialog(window.getS());fontDialog.setText("Selectyourfavoritefont");FontDataselectedFond=//SelectColorDialogcolorDialog=newColorDialog(window.getS());fontDialog.setText("Selectyourfavoritecolor");RGBselectedColor=//Nowafewmessages"Please (),"Error","Erroroccured"); (),"Info","Infofor (),"Question","Really,really?"); (),"Warning","Iwarn}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}運(yùn)行程序。如果點(diǎn)擊菜單或按鈕,將依次彈出所有標(biāo)準(zhǔn)用戶自定義概接下來將描述如何自定義框,以及如何使用創(chuàng)建工使用“oRCP”模板創(chuàng)action standarddialogtest.CallStandardDialogforthisaction.action向菜單或里添加一個(gè)action,并且為這個(gè)action創(chuàng)建類dialogtest.CallMyDialog創(chuàng)建創(chuàng)建一個(gè)類,用以描述框,取名為dialogtest.dialog.MyDialog。此類繼承了TitleAreaDialogpackageimportorg.eclipse.jface.action.IAction;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.ui.IWorkbenchWindow;importpublicclassCallMyDialogimplementsIWorkbenchWindowActionDelegatepublicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)//TODOAuto-generatedmethod}publicvoidrun(IActionaction)//TODOAuto-generatedmethod}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}運(yùn)行程序,將彈出一個(gè)框,你必須在lastname里修改數(shù)據(jù),否則框?qū)棾鲆粋€(gè)出錯(cuò)消息框向?qū)Ц舉clipse可以由WizardDialog類實(shí)現(xiàn)了一個(gè)向?qū)Э颉O驅(qū)Э蚩刂浦M(jìn)程(導(dǎo)航,進(jìn)度條,areafor和消息框。Wizard類可以提供向?qū)?nèi)容,WizardPages例創(chuàng)建一個(gè)新工程,使用“oRCP”模添加一個(gè)action“CallWizardAction”給菜單或者,為這個(gè)action創(chuàng)建一MyPageOne和MyPageTwo繼承org.eclipse.jface.wizard.WizardPage擴(kuò)展org.eclipse.jface.wizard.IwizardPage創(chuàng)建一個(gè)新類MyWizardorg.eclipse.jface.wizard.Wizard。packageimportorg.eclipse.jface.wizard.WizardPage;importorg.eclipse.swt.SWT;importorg.eclipse.swt.events.KeyEvent;importorg.eclipse.swt.events.KeyListener;importorg.eclipse.swt.layout.GridData;importorg.eclipse.swt.layout.GridLayout;importorg.eclip importorg.eclipse.swt.widgets.Control;importorg.eclipse.swt.widgets.Label;importorg.eclipse.swt.widgets.Text;publicclassMyPageOneextendsWizardPage{privateTexttext1;privateCompositepublicMyPageOne(){super("FirstPage");setTitle("FirstPage2");setDescription("Thiswizarddoesnotreallydoanything.Butthisisthefirst}publicvoidcreateControl(Compositeparent){container=newComposite(parent,SWT.NULL);GridLayoutlayout=newGridLayout();layout.numColumns=Labellabel1=newLabel(container,SWT.NULL);label1.setText("Puthereavalue");text1.addKeyListener(newpublicvoidkeyPressed(KeyEvente)//TODOAuto-generatedmethod}publicvoidkeyReleased(KeyEvente)}}GridDatagd=newGridData(GridData.FILL_HORIZONTAL);//Requiredtoavoidanerrorinthesystem}publicStringgetText1(){}//Youneedtooverwritethismethodotherwiseyoureceive////ThismethodshouldalwaysreturnthetopwidgetofthepublicControlgetControl()return}}packageimportorg.eclipse.jface.wizard.IWizardPage;importorg.eclipse.jface.wizard.WizardPage;importorg.eclipse.swt.SWT;importorg.eclipse.swt.events.KeyEvent;importorg.eclipse.swt.events.KeyListener;importorg.eclipse.swt.layout.GridData;importorg.eclipse.swt.layout.GridLayout;importorg.eclip importorg.eclipse.swt.widgets.Control;importorg.eclipse.swt.widgets.Label;importorg.eclipse.swt.widgets.Text;publicclassMyPageTwoextendsWizardPageimplementsIWizardPage{privateTexttext1;privateCompositecontainer;publicMyPageTwo(){super("SecondPage");setTitle("SecondPage");setDescription("Nowthisisthesecondpage");}publicvoidcreateControl(Compositeparent){container=newComposite(parent,SWT.NULL);GridLayoutlayout=newGridLayout();layout.numColumns=Labellabel1=newLabel(container,SWT.NULL);label1.setText("Puthereavalue");text1.addKeyListener(newpublicvoidkeyPressed(KeyEvente)//TODOAuto-generatedmethod}publicvoidkeyReleased(KeyEvente)}}GridDatagd=newGridData(GridData.FILL_HORIZONTAL);//Requiredtoavoidanerrorinthesystem}publicStringgetText1(){}//Youneedtooverwritethismethodotherwiseyoureceivea//ThismethodshouldalwaysreturnthetopwidgetofthepublicControlgetControl(){returncontainer;}}packageimportorg.eclipse.jface.viewers.IStructuredSelection;importorg.eclipse.jface.wizard.Wizard;publicclassMyWizardextendsWizardprivateMyPageOneprivateMyPageTwopublicMyWizard(){}publicvoidaddPages()one=newMyPageOne();two=newMyPageTwo();}publicbooleanperformFinish()//justputtheresulttotheconsole,imagineheremuch//inligentstuff.return}}packageimportorg.eclipse.jface.action.IAction;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.jface.wizard.WizardDialog;importorg.eclipse.ui.IWorkbenchWindow;importpublicclassCallWizardDialogimplementsIWorkbenchWindowActionDelegate{privateIWorkbenchWindowwindow;publicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow){this.window=window;}publicvoidrun(IActionaction)MyWizardwizard=newWizardDialogdialog=newWizardDialog(window.getS(),wizard);}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}首選11.1首選首選項(xiàng)是key/valuespairs,key是一個(gè)arbitrary名字的首選。Value可以是boolean,string,int或者其他簡單類型。首選項(xiàng)被接受且保存通過get和put方法,在preferces還沒有被設(shè)定的時(shí)候,get方法eclipse首選項(xiàng)通過eclipse運(yùn)行時(shí)定義了三個(gè)so-calledInstancescope:如果用戶運(yùn)行同一個(gè)程序兩次,兩次之間的的設(shè)定可能不一樣Configurationscope:如果用戶運(yùn)行同一個(gè)程序兩次,兩次之間的設(shè)定是一樣的Defaultscope:默認(rèn)值不可被更改,由插件里的設(shè)置文件和產(chǎn)品定義。你能使用以下代碼優(yōu)先Prefrencespreferences=new11.2.使用首選 oRCP”模板創(chuàng)建一個(gè)新工程修改應(yīng)用程序的ID為“PreferenceRCP”為菜單或添加兩個(gè)action“PreferenceAction”“DeleteAction”,創(chuàng)建與之同步的preferencetest.PreferenceAction和接下來為兩個(gè)action編碼。我們用以preferences和刪除他們。設(shè)定之后重起軟件,然后刪除他packageimportimportimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.ui.IWorkbenchWindow;importorg.eclipse.ui.IWorkbenchWindowActionDelegate;importorg.osgi.service.prefs.BackingStoreException;importorg.osgi.service.prefs.Preferences;publicclassPreferenceActionimplementsIWorkbenchWindowActionDelegateprivateIWorkbenchWindowpublicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)this.window=}publicvoidrun(IActionaction)//Thiswouldbeusinginstance//Preferencespreferences=new////ThisisusingconfigurationPreferencespreferences=new//Thiswouldbeusingdefaultn//Preferencespreferences=new//Preferencessub1=preferences.node("note1");Preferencessub2=sub1.put("h1", sub1.put("h2", osub2.put("h1", (),"Info", (),"Info", (),"Info", stheapplicationtosavethetry}catch(BackingStoreExceptione)//TODOAuto-generatedcatchblock}}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}packageimportimportimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.ui.IWorkbenchWindow;importorg.eclipse.ui.IWorkbenchWindowActionDelegate;importorg.osgi.service.prefs.BackingStoreException;importorg.osgi.service.prefs.Preferences;publicclassDeleteActionimplementsIWorkbenchWindowActionDelegateprivateIWorkbenchWindowpublicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)this.window=}publicvoidrun(IActionaction)Preferencespreferences=newPreferencessub1=preferences.node("note1");Preferencessub2=//Showthevaluesbeforedeletingthem (),"Info", (),"Info", (),"Info",//Deletetheexistingtry{}catch(BackingStoreExceptione){}//Nowshowthevalues (),"Info", (),"Info", (),"Info", stheapplicationtosavethetry{}catch(BackingStoreExceptione)//TODOAuto-generatedcatchblock}}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}11.3.首選首選項(xiàng)頁允許修改/org.eclipse.ui.preferencePages。使用“oRCP”創(chuàng)建一個(gè)新的工程。packageimportorg.eclipse.jface.action.I importorg.eclipse.jface.action. importorg.eclipse.ui.IWorkbenchActionConstants;importimportimportimportimportpublicclassApplicationActionBarAdvisorextendsActionBarAdvisorprivateIWorkbenchActionpublicApplicationActionBarAdvisor(IActionBarConfigurerconfigurer)}protectedvoidmakeActions(IWorkbenchWindowwindow){preferenceAction=ActionFactory.PREFERENCES.create(window);}protectedvoidfill Bar){Manager = }}“ShowPrefActionpackagepreferencepagetest;importimportorg.eclipse.jface.dialogs.MessageDialog;importorg.eclipse.jface.viewers.ISelection;importorg.eclipse.ui.IWorkbenchWindow;importorg.eclipse.ui.IWorkbenchWindowActionDelegate;importpreferencepagetest.preferences.PreferenceConstants;publicclassShowActionimplementsIWorkbenchWindowActionDelegateprivateIWorkbenchWindowpublicvoiddispose()//TODOAuto-generatedmethod}publicvoidinit(IWorkbenchWindowwindow)this.window=}publicvoidrun(IActionaction)StringmyPrefString=MessageDialog.openInformation(window.getS(),"Info",myPrefString);BooleanmyPrefBoolean=Activator.getDefault().getPreferenceStore()MessageDialog.openInformation(window.getS(),"Info",//Iassumeyougettherestby}publicvoidselectionChanged(IActionaction,ISelectionselection)//TODOAuto-generatedmethod}}添加狀態(tài)安裝狀態(tài)使用“oRCP”創(chuàng)建一個(gè)新工程進(jìn)入ApplicationWorkbenchWindowAdvisor,改變preWindowOpen方法。與此有關(guān)的代碼是packageimportimportimportorg.eclipse.ui.application.IActionBarConfigurer;importorg.eclipse.ui.application.IWorkbenchWindowConfigurer;importorg.eclipse.ui.application.WorkbenchWindowAdvisor;publicclassApplicationWorkbenchWindowAdvisorWorkbenchWindowAdvisorpublicIWorkbenchWindowConfigurerconfigurer)}publicActionBarAdvisorIActionBarConfigurerconfigurer)returnnew}publicvoidpreWindowOpen()IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();configurer.setInitialSize(newPoint(400,300)); configurer.setTitle(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論