開(kāi)發(fā)平臺(tái)學(xué)習(xí)手冊(cè)u(píng)i層設(shè)計(jì)理解學(xué)習(xí)_第1頁(yè)
開(kāi)發(fā)平臺(tái)學(xué)習(xí)手冊(cè)u(píng)i層設(shè)計(jì)理解學(xué)習(xí)_第2頁(yè)
開(kāi)發(fā)平臺(tái)學(xué)習(xí)手冊(cè)u(píng)i層設(shè)計(jì)理解學(xué)習(xí)_第3頁(yè)
開(kāi)發(fā)平臺(tái)學(xué)習(xí)手冊(cè)u(píng)i層設(shè)計(jì)理解學(xué)習(xí)_第4頁(yè)
開(kāi)發(fā)平臺(tái)學(xué)習(xí)手冊(cè)u(píng)i層設(shè)計(jì)理解學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

UIFactoryII技術(shù)框架介紹UI層設(shè)計(jì)目錄1. 功能節(jié)點(diǎn)加載機(jī)制 11.1 NC界面模擬 11.1.1 窗口 21.1.2 頂層面板(工作臺(tái)) 31.1.3 工作臺(tái)—NClogo與快捷搜索面板 51.1.4 工作臺(tái)-所有打開(kāi)的功能節(jié)點(diǎn)頁(yè)簽面板 71.1.5 功能節(jié)點(diǎn)面板 81.1.6 功能窗口部件 101.1.7 FuncletWidget(重要理解部分) 111.2 加載機(jī)制 121.2.1 示例 121.2.2 需要做的工作 131.2.3 查看代碼入口 141.2.4 菜單項(xiàng)響應(yīng)件 141.2.5 創(chuàng)建界面元素組件容器FuncletWidgetContainer 151.2.6 構(gòu)造ifunlet面板的元素和菜單欄的按鈕 181.2.7構(gòu)造狀態(tài)欄 271.3 按鈕定義、配置 271.3.1 增加自定義按鈕 271.3.2 按鈕可用性的影響因素 311.3.3 常用按鈕介紹 331.3.4 按鈕布局方式: 331.4 UI事件框架 371.4.1 常用事件 371.4.2 Xml配置方式 371.4.3練習(xí):增加一個(gè)自己的事件 382. 樹(shù)型單據(jù)設(shè)計(jì) 392.1.1 建立樹(shù)面板,修改布局組裝表 392.1.2 為樹(shù)面板,增加應(yīng)用模型(model) 403. UI設(shè)計(jì)歸納總結(jié) 423.1 背景 423.2 設(shè)計(jì)思路 423.2.1 分離的展顯邏輯 423.2.2 自助能動(dòng)的Action元素 433.2.3 Composite模式來(lái)實(shí)現(xiàn)組裝 433.3 常用元素介紹 433.3.1 模型層元素 433.3.2 視圖層元素 443.3.3 常用的接口介紹 453.3.4 NC的action事件 46功能節(jié)點(diǎn)加載機(jī)制NC界面模擬以下的演示示例類的命名,我均采用NC產(chǎn)品已有的命名方式。通過(guò)該部分的學(xué)習(xí)重點(diǎn)理解NC界面之間的層級(jí)管理。開(kāi)發(fā)過(guò)程中理解每級(jí)模板自主能動(dòng)的概念(父模板負(fù)責(zé)組裝,具體功能由各自來(lái)實(shí)現(xiàn))重點(diǎn)理解FuncletWidget界面元素組成,前面的部分了解就可以窗口實(shí)現(xiàn)樣式代碼規(guī)劃nc.desktop.ui.NcWindowextendsJFrame代碼示例顯示效果頂層面板(工作臺(tái))實(shí)現(xiàn)樣式代碼規(guī)劃:容器面板(nc.desktop.ui.Workbench),使用borderlayout布局North面板(nc.desktop.ui.WorkbenchTopPanelextendsJPanel)Center面板(nc.desktop.ui.WorkbenchSpaceextendsJPanel)考慮單例代碼示例將其增長(zhǎng)到父面板中增長(zhǎng)其子面板顯示效果由于子面板中,還是空的,所以看到效果如下。但是我們代碼中知道,已經(jīng)增長(zhǎng)了兩級(jí)面板工作臺(tái)—NClogo與快捷搜索面板實(shí)現(xiàn)樣式代碼示例其沒(méi)有子面板,需要實(shí)現(xiàn)如下功能需要增長(zhǎng)底圖以及NClogo圖標(biāo)代碼如下:備注:通過(guò)代碼可以知道,NC界面樣式主題位于NCHOME/resource/themeroot/途徑下,使用綠色主題,實(shí)現(xiàn)樣式如下顯示效果工作臺(tái)-所有打開(kāi)的功能節(jié)點(diǎn)頁(yè)簽面板實(shí)現(xiàn)樣式代碼規(guī)劃父面板(nc.desktop.ui.WorkbenchSpace)容器面板(nc.ui.pub.beans.ExtTabbedPaneextendsjavax.swing.JTabbedPane),代碼示例增長(zhǎng)面板到其父面板中功能節(jié)點(diǎn)面板實(shí)現(xiàn)樣式代碼規(guī)劃每個(gè)tab頁(yè)簽面板為一個(gè)功能節(jié)點(diǎn)(nc.funcnode.ui.FuncNodePanel)制定接口(nc.funcnode.ui.IFuncletWindow),每個(gè)功能節(jié)點(diǎn)都需要實(shí)現(xiàn)該接口中的方法:顯示功能節(jié)點(diǎn)窗口(publicvoidshowWindow())和關(guān)閉功能節(jié)點(diǎn)窗口(publicbooleancloseWindow())代碼示例登陸成功,默認(rèn)增長(zhǎng)功能導(dǎo)航和消息中心兩個(gè)功能功能節(jié)點(diǎn)tab顯示效果功能窗口部件每個(gè)功能節(jié)點(diǎn),界面展示的元素都不相同,NC采用如下結(jié)構(gòu)展示每個(gè)FuncNodePanel,使用一個(gè)界面元素組件容器(FuncletWidgetContainerextendsJPanel)來(lái)顯示其擁有的元素。每個(gè)(FuncletWidgetContainerextendsJPanel),其使用卡片布局,默認(rèn)包含一個(gè)FuncletWidgetFuncletWidget(重要理解部分)每個(gè)FuncletWidget包含三部分,容納菜單欄、界面信息、狀態(tài)欄代碼結(jié)構(gòu)如下FuncletWidget—North放按鈕面板FuncletWidget—Center放信息面板信息面板—SOUTH放狀態(tài)欄目信息面板—CENTER放界面信息(funclet)xml加載機(jī)制示例以下演示使用的的配置文獻(xiàn)由uap_studio自動(dòng)生成的主子表結(jié)構(gòu)配置文獻(xiàn)如下圖需要做的工作接上面的介紹,在導(dǎo)航菜單雙擊或者右鍵打開(kāi)菜單節(jié)點(diǎn)的時(shí)候,我們可以預(yù)測(cè)其響應(yīng)要做的事件創(chuàng)建FuncletWidgetContainer需要為其創(chuàng)建一個(gè)子面板FuncletWidget。為了創(chuàng)建一個(gè)FuncletWidget,需要:創(chuàng)建子面板-菜單欄(放置按鈕條)創(chuàng)建子面板—界面信息,放置界面元素(按鈕條,界面元素)創(chuàng)建子面板--ifunclet實(shí)現(xiàn)類創(chuàng)建子面板—任務(wù)欄運(yùn)用創(chuàng)建的FuncletWidgetContainer來(lái)構(gòu)造FuncNodePanel將FuncNodePanel作為一個(gè)父面板ExtTabbedPane的一個(gè)頁(yè)署名來(lái)展示查看代碼入口在你對(duì)NC產(chǎn)品還不熟悉的時(shí)候,可以采用如下的方式刪除xml配置文獻(xiàn)中的所有信息,雙擊功能節(jié)點(diǎn)這個(gè)時(shí)候功能節(jié)點(diǎn)應(yīng)當(dāng)是打不開(kāi)的,查看控制臺(tái)的異常信息。通過(guò)異常我們可以看到功能節(jié)點(diǎn)打開(kāi)代碼執(zhí)行順序菜單項(xiàng)響應(yīng)件nc.funcnode.ui.FuncletWindowEngine.openNode(OpenParamopenParam)方法由導(dǎo)航菜單項(xiàng)事件響應(yīng)機(jī)制調(diào)用:重要是啟動(dòng)線程,執(zhí)行功能節(jié)點(diǎn)打開(kāi)方法openNodeImple()。在openNodeImple()中執(zhí)行如下的工作創(chuàng)建界面元素組件容器FuncletWidgetContainer環(huán)節(jié)1即下圖的第1部分需要做的工作創(chuàng)建環(huán)節(jié)與簡(jiǎn)樸主子面板的創(chuàng)建環(huán)節(jié)同樣一方面要得到一個(gè)FuncletWidgetContainer面板然后得到一個(gè)FuncletWidget子面板建立主子面板的關(guān)系:將子面板添加到父面板中產(chǎn)品代碼實(shí)現(xiàn)根據(jù)功能節(jié)點(diǎn)注冊(cè)信息frvo,調(diào)用FuncletWidgetContainerFactory,創(chuàng)建一個(gè)FuncletWidgetContainer每次創(chuàng)建一個(gè)FuncletWidgetContainer,根據(jù)功能節(jié)點(diǎn)注冊(cè)信息frvo,創(chuàng)建一個(gè)FuncletWidget,并將其添加到FuncletWidgetContainer中環(huán)節(jié)2即下圖的第2部分需要做的工作創(chuàng)建環(huán)節(jié)與簡(jiǎn)樸主子面板的創(chuàng)建環(huán)節(jié)同樣一方面要?jiǎng)?chuàng)建一個(gè)FuncletWidget面板(前面已經(jīng)創(chuàng)建)然后創(chuàng)建子面板:菜單欄和界面信息建立主子面板的關(guān)系:將子面板添加到父面板中產(chǎn)品代碼實(shí)現(xiàn)構(gòu)造ifunlet面板的元素和菜單欄的按鈕實(shí)例化看代碼可以了解,根據(jù)功能節(jié)點(diǎn)注冊(cè)處指定的功能類名稱,來(lái)實(shí)例化成一個(gè)Ifunclet類型的對(duì)象使用uap_studio自動(dòng)生成的功能類名基類使用nc.ui.pubapp.uif2app.ToftPanelAdaptorEx類,便于二次開(kāi)發(fā)擴(kuò)展,其為IFunclet的實(shí)現(xiàn)類的子類還要給節(jié)點(diǎn)注冊(cè)一個(gè)參數(shù),參數(shù)名為:BeanConfigFilePath,值為配置單據(jù)界面的xml文獻(xiàn)的途徑,在打開(kāi)節(jié)點(diǎn)的時(shí)候會(huì)讀取并解析該途徑下的xml文獻(xiàn)配置的布局信息代碼實(shí)現(xiàn)以下初始化的,就是讀取xml文獻(xiàn)信息。加載順序理解Composite模式,通SpringIOC實(shí)現(xiàn)組件的任意組裝,達(dá)成如下的模式:產(chǎn)品=零件+總裝表,零件=小零件+裝配表初始化—1加載xml文獻(xiàn)關(guān)注點(diǎn):參數(shù)名稱必須為BeanConfigFilePath初始化—2加載登陸環(huán)境信息產(chǎn)品代碼:通過(guò)代碼可以看到,是加載了xml中一個(gè)id=”context”的bean對(duì)象,并使用這個(gè)對(duì)象記錄:當(dāng)前功能節(jié)點(diǎn)信息、當(dāng)前登陸信息等。使用場(chǎng)景: 是否必須配置:是這個(gè)Bean無(wú)論何種類型的單據(jù)都需要配置XML配置示例:初始化—3加載xxxPreprocessor產(chǎn)品代碼: 通過(guò)代碼可以看到,加載了xml中所有以id已”preprocessor”結(jié)尾的bean使用場(chǎng)景:是否必須配置:否該屬性通常使用對(duì)標(biāo)準(zhǔn)產(chǎn)品做二次開(kāi)發(fā)的擴(kuò)展開(kāi)發(fā)時(shí)候使用。XML配置示例:詳見(jiàn)配置文獻(xiàn)\擴(kuò)展開(kāi)發(fā)標(biāo)準(zhǔn)bean配置.xml初始化—3加載remoteCallCombinatorCaller產(chǎn)品代碼:通過(guò)代碼可以看到,加載了xml中所有以id=”remoteCallCombinatorCaller”的beanbean中元素都實(shí)現(xiàn)了接口IRemoteCallCombinatorUser調(diào)用其prepare()方法業(yè)務(wù)意義:是否必須配置:否。使用場(chǎng)景:通常使用在加載過(guò)程中遠(yuǎn)程調(diào)用比較多的單據(jù)中,如主子表單據(jù)。所有的遠(yuǎn)程調(diào)用統(tǒng)一預(yù)加載。常見(jiàn)的遠(yuǎn)程調(diào)用:加載單據(jù)模板、加載查詢模板、加載自定義項(xiàng)規(guī)定:放置在其中的需要預(yù)加載的遠(yuǎn)程調(diào)用都必須實(shí)現(xiàn)接口IRemoteCallCombinatorUserXML配置示例:初始化—4裝配總表產(chǎn)品代碼:通過(guò)代碼可以看到,加載一個(gè)id=“container”的bean,業(yè)務(wù)意義:是否必須配置:是該bean是視圖層元素的裝配總表,指定了界面布局方式和每塊布局展示的界面視圖,以及按鈕根據(jù)需要指定界面布局方式,每一塊的布局都可作為零件隨時(shí)替換。XML配置規(guī)定:init-method="initUI",必須指定,且不能更改給containerbean添加tangramLayoutRoot屬性,擬定具體布局類型。值必須接口TangramLayoutNode的一個(gè)實(shí)現(xiàn)類。布局類型有四種:水平布局、垂直布局、tab頁(yè)簽布局、面板賦值界面通常是前三種布局互換使用,劃定界面分割方式,每個(gè)最小的每個(gè)框內(nèi)放一個(gè)面板布局HSNode即(HorizontalSplitPaneNode)水平布局必須指定左右的布局方式VSNode即(VerticalSplitPaneNode)垂直平布局必須指定其上下的布局方式TBNode即(TabbedPaneNode)垂直平布局必須指定每個(gè)頁(yè)簽的布局方式可選屬性showMode,可在(TabbedPane,CardLayout)選擇一個(gè),默認(rèn)是TabbedPaneTabbedPane,下級(jí)的布局按照頁(yè)簽的方式展示。CardLayout,下級(jí)的布局按照卡片的方式展示CNode即(ComponentNode)面板必須指定其子容器面板,即component屬性Xml配置示例具體見(jiàn)配置文獻(xiàn)\列表型配置范文.xml配置文獻(xiàn)\管理型配置范文.xml配置文獻(xiàn)\樹(shù)管理配置范文.xml配置文獻(xiàn)\樹(shù)卡型配置范文.xml1.2.7構(gòu)造狀態(tài)欄按鈕定義、配置增長(zhǎng)自定義按鈕非業(yè)務(wù)按鈕的定義方法不需要向后臺(tái)傳遞數(shù)據(jù),如單個(gè)單據(jù)的EXECL導(dǎo)入,EXECL導(dǎo)出等按鈕可以繼承nc.ui.uif2.NCAction。例子:nc.ui.uif2.actions.AddAction為了可以通過(guò)Spring實(shí)例化,需要顯示的指定一下默認(rèn)方法屬性:interceptor所屬類:NCAction意義:攔截器。詳見(jiàn)下節(jié)攔截器定義實(shí)例化:通常由Spring中注入exceptionHandler所屬類:NCAction意義:按鈕異常解決類以上兩個(gè)屬性不規(guī)定配置,可以參見(jiàn)NCAction的actionPerformed(E)方法來(lái)查看Model所屬類:這個(gè)屬性要自己新增,提供get\set方法(命名習(xí)慣上都用這個(gè),但是不規(guī)定必須是這個(gè))V6中通常使用nc.ui.uif2.model.AbstractAppModel類型意義:把此action設(shè)立為單據(jù)model的觀測(cè)者。必須的實(shí)例化:由Spring注入其他的根據(jù)自己的業(yè)務(wù)需要,定義自己的屬性BtnName所屬類:NCAction自定義按鈕需要指定按鈕名稱Code所屬類:NCAction自定義按鈕需要指定按鈕編碼,注意不要跟產(chǎn)品已有的編碼反復(fù)假如不指定code,報(bào)錯(cuò)如下Overwrite方法doAction()執(zhí)行具體的相應(yīng)動(dòng)作,通常會(huì)調(diào)用model的行為isActionEnable()(設(shè)立當(dāng)前action是否可用,平臺(tái)會(huì)在模型發(fā)出事件告知,調(diào)用它設(shè)立按鈕的可用狀態(tài))標(biāo)準(zhǔn)業(yè)務(wù)按鈕的定義假如需要將變化的數(shù)據(jù)同步到后臺(tái),則按鈕需要繼承nc.ui.pubapp.uif2app.actions.pflow.ScriptPFlowAction(該類是NCAction的一個(gè)間接子類)產(chǎn)品對(duì)常用的保存、刪除、提交、審批、棄審等增長(zhǎng)了標(biāo)準(zhǔn)的實(shí)現(xiàn)類。屬性: 菜單按鈕的定義通常在xml中配置一個(gè)nc.funcnode.ui.action.GroupAction或者nc.funcnode.ui.action.MenuAction的bean就可以了。GroupAction:系統(tǒng)自動(dòng)復(fù)制其第一個(gè)子按鈕的名稱和相應(yīng)事件、控制狀態(tài)到菜單按鈕。即在xml中對(duì)菜單按鈕指定名稱是不能生效的點(diǎn)擊該菜單按鈕可以指定其復(fù)制的子按鈕的業(yè)務(wù)操作這個(gè)菜單按鈕也是可以有可用狀態(tài)控制MenuAction:只作為一個(gè)顯示的菜單按鈕,一直可用,沒(méi)有響應(yīng)事件按鈕可用性的影響因素在NC產(chǎn)品中通常有以下兩個(gè)因素影響按鈕的可用性:界面狀態(tài)、業(yè)務(wù)狀態(tài)界面狀態(tài)即當(dāng)前UI界面所處的狀態(tài)V6設(shè)立如下幾種狀態(tài)Init:初始態(tài),功能節(jié)點(diǎn)新打開(kāi)狀態(tài).Add新增態(tài),EDIT編輯態(tài)NOT_EDIT非編輯通常按鈕的操作,需要通過(guò)modle業(yè)務(wù)狀態(tài)在單據(jù)上我們通常叫單據(jù)狀態(tài)。有些流程相關(guān)的按鈕不同的單據(jù)狀態(tài),按鈕的可用性應(yīng)當(dāng)是不同的。如提交按鈕,只針對(duì)自由態(tài)的單據(jù)。審批和收回按鈕只針對(duì)提交態(tài)的單據(jù),棄審按鈕只針對(duì)審批通過(guò)的單據(jù)。如下圖提交態(tài)按鈕示例V63預(yù)先指定了一些狀態(tài),假如你要使用產(chǎn)品標(biāo)準(zhǔn)的按鈕,則單據(jù)狀態(tài)的設(shè)立,必須按照其規(guī)劃來(lái)設(shè)立。即自由態(tài)的單據(jù),單據(jù)狀態(tài)值必須是-1常用按鈕介紹V63已經(jīng)實(shí)現(xiàn)的標(biāo)準(zhǔn)按鈕存放在如下的結(jié)構(gòu)中Actions:標(biāo)準(zhǔn)操作按鈕Actions.Batch:批解決按鈕(通常用在單表中,需要批量解決的地方)Actions.billlist:列表界面操作按鈕Actions.Interceptor:已經(jīng)實(shí)現(xiàn)的常用按鈕攔截器Actions.Pagination:分頁(yè)解決相關(guān)Actions.Pflow:需要平臺(tái)流解決(通常是審批流相關(guān):保存、提交、審批、棄審等)的按鈕按鈕布局方式節(jié)點(diǎn)級(jí)次布局頁(yè)面位置:頁(yè)簽頂部可見(jiàn)方式:一直可見(jiàn)展現(xiàn)形式:菜單應(yīng)用場(chǎng)景:假如tangramLayoutRoot相應(yīng)的布局管理,只有一個(gè)頁(yè)簽(VSNode、HSNode、CNode布局)則可考慮這種方式假如tangramLayoutRoot相應(yīng)的布局管理,即便有多個(gè)頁(yè)簽(TBNode),但是顯示的按鈕不需要根據(jù)頁(yè)簽的改變發(fā)生變化,也可以考慮這種方式實(shí)現(xiàn)方式:配置在TangramContainer中。可以配置瀏覽態(tài)按鈕和編輯態(tài)按鈕元素actions:配置瀏覽狀態(tài)下任何頁(yè)簽都可見(jiàn)按鈕元素editActons:配置編輯狀態(tài)下任何頁(yè)簽都可見(jiàn)的按鈕。假如沒(méi)有編輯態(tài),可不配置頁(yè)簽級(jí)布局顯示位置:頁(yè)面頂部可見(jiàn)方式:隨頁(yè)簽的激活狀態(tài)決定其可見(jiàn)性展現(xiàn)形式:菜單應(yīng)用場(chǎng)景:假如頂層容器tangramLayoutRoot采用TBNode布局,且需要根據(jù)頁(yè)簽的改變顯示不同的按鈕,則采用這種方式實(shí)現(xiàn)方式:分為絕對(duì)布局和相對(duì)布局絕對(duì)布局將按鈕和視圖層元素運(yùn)用StandAloneToftPanelActionContainer來(lái)包裝注意<constructor-argref="xxx"/>參數(shù)要傳入相應(yīng)的視圖層元素,(如listView\billFormEditor)且視圖元素控件必須實(shí)現(xiàn)ITabbedPaneAwareComponent接口,當(dāng)頁(yè)簽切換時(shí)告知外層容器實(shí)現(xiàn)Action的切換。即<constructor-argref="xxx"/>指定的視圖層顯示的時(shí)候,才顯示其中配置的按鈕運(yùn)用toftpanelActionContributors對(duì)包裝成的對(duì)象進(jìn)行組織。id=”toftpanelActionContributors”的bean,不需要再做配置,程序會(huì)自動(dòng)加載相對(duì)布局這種布局方式不常見(jiàn),作為了解將按鈕和視圖層元素運(yùn)用PlugableTangramContainer來(lái)包裝參數(shù)constraints傳入相應(yīng)的視圖層元素參數(shù)“actions”傳送相應(yīng)的按鈕運(yùn)用toftpanelActionContributors對(duì)包裝成的對(duì)象進(jìn)行組織。Container也要修改成相對(duì)布局后面的布局要指定參照targetComponent,并制定相對(duì)位置視圖級(jí)布局顯示位置:視圖所在tab的右上側(cè)可見(jiàn)方式:一直可見(jiàn)展現(xiàn)形式:工具欄應(yīng)用場(chǎng)景:假如上層布局采用了TBNode,則根據(jù)需要考慮增長(zhǎng)視圖按鈕實(shí)現(xiàn)方式:視圖元素控件必須實(shí)現(xiàn)IComponentWithActions接口。視圖層所在的上級(jí)布局必須采用了TBNode,由于視圖級(jí)的元素是顯示在頁(yè)簽的右上側(cè),只有TBNode才有這個(gè)位置當(dāng)前卡片視圖nc.ui.pubapp.uif2app.view.ShowUpableBillForm已經(jīng)實(shí)現(xiàn)了該接口UI事件框架常用事件NC產(chǎn)品針對(duì)自己的界面常用的事件做了封裝,常見(jiàn)的有卡片列表各種編輯事件、組織改變事件、新增事件、排序事件、頁(yè)簽切換事件、行改變事件、合計(jì)事件等。已經(jīng)實(shí)現(xiàn)的事件放在重要是:Event:公共的事件或者接口Event.card:卡片界面常用事件Event.list:列表界面常用事件Xml配置方式一方面配置nc.ui.pubapp.uif2app.event.EventHandlerGroup屬性evnent:取值為具體的event類;屬性picky:取值可實(shí)現(xiàn)IPickyEventHandler接口來(lái)過(guò)濾是否派發(fā)事件。假如不需要,則賦值例如ChildrenPicky類則表達(dá)按默認(rèn)的指定VO類方式來(lái)過(guò)濾,即只有bodyVoClasses中配置的VO類才會(huì)派發(fā)到相應(yīng)的事件解決中;屬性handler:取值必須實(shí)現(xiàn)IAppEventHandler接口,接口參數(shù)相應(yīng)具體的event類。如下圖運(yùn)用AppEventHandlerMediator來(lái)組織事件和模型model.注意將其beanid以Mediator結(jié)尾,這樣系統(tǒng)才干自動(dòng)加載1.4.3練習(xí):增長(zhǎng)一個(gè)自己的事件樹(shù)型單據(jù)設(shè)計(jì)一方面要先生成標(biāo)準(zhǔn)的管理型單據(jù),然后將其改導(dǎo)致數(shù)管理型單據(jù)建立樹(shù)面板,修改布局組裝表增長(zhǎng)樹(shù)面板樹(shù)面板可以使用ponents.TreePanel或者其子類更改界面總裝表(container)指定其布局位置。我們需要替換本來(lái)的快捷查詢區(qū)域,將本來(lái)的替換掉為樹(shù)面板,增長(zhǎng)應(yīng)用模型(model)模型實(shí)例化:樹(shù)面板配合使用的model是通常使用nc.ui.uif2.model.HierachicalDataAppModel或者其子類模型屬性初始化:模型服務(wù)類(service)、樹(shù)構(gòu)造器策略(treeCreateStrategy)、登陸環(huán)境(context)模型服務(wù)類(service),模型用來(lái)向后臺(tái)同步數(shù)據(jù)??梢詫?shí)現(xiàn)nc.ui.uif2.model.IAppModelService或者擴(kuò)展自己的方法樹(shù)構(gòu)造器策略(treeCreateStrategy):用來(lái)將查詢出來(lái)數(shù)據(jù)組織成樹(shù)結(jié)構(gòu)。可使用nc.vo.bd.meta.BDObjectTreeCreateStrategy。構(gòu)造器策略需要指定根節(jié)點(diǎn)名稱和VO轉(zhuǎn)換工廠定義VO轉(zhuǎn)換工廠:通常屬性結(jié)構(gòu)是查詢一個(gè)單VO??梢允褂胣c.vo.bd.meta.BDObjectAdpaterFactory來(lái)轉(zhuǎn)換模型管理器:通常用來(lái)調(diào)用模型的service服務(wù),為模型初始化提供數(shù)據(jù)每個(gè)樹(shù)的數(shù)據(jù)初始方式不同,產(chǎn)品沒(méi)條提供標(biāo)準(zhǔn)模型管理器。需要實(shí)現(xiàn)nc.ui.uif2.model.IAppModelDataManager接口,實(shí)現(xiàn)其initModel()方法通常樹(shù)節(jié)點(diǎn)的左側(cè)的樹(shù)數(shù)據(jù),在model加載完畢就要查詢出來(lái)。可以在此完畢創(chuàng)建一個(gè)名字如:xxxMediator類。作為左側(cè)樹(shù)的模型和右側(cè)的管理模型的協(xié)調(diào)者M(jìn)ediator類在功能節(jié)點(diǎn)打開(kāi)的時(shí)候就能自動(dòng)加載。在這個(gè)類中為兩個(gè)模型注冊(cè)事件監(jiān)聽(tīng),抓取到兩個(gè)模型的變化事件例:我們可以抓取到右側(cè)模型模型初始化事件,同時(shí)完畢我們的左側(cè)樹(shù)模型初始化。也可以抓取左側(cè)樹(shù)模型的選擇節(jié)點(diǎn)變化事件,來(lái)同步右側(cè)模型的數(shù)據(jù)的變化UI設(shè)計(jì)歸納總結(jié)(復(fù)制自陳偉文檔)背景NC5.X系列,采用UIFactoryINC6.X系列,采用UIFactoryIITempletMethod模式,UI、EventHandler、Controler分工,典型的節(jié)點(diǎn)可以快速適配,快速開(kāi)發(fā)Composite模式,通SpringIOC實(shí)現(xiàn)組件的任意組裝,達(dá)成如下的模式:產(chǎn)品=零件+總裝表,零件=小零件+裝配表非典型的界面不能很好的適配存儲(chǔ)大量代碼復(fù)制很好的解決界面多樣性的問(wèn)題并且實(shí)現(xiàn)松耦合的代碼結(jié)構(gòu)+高重用的組件設(shè)計(jì)思緒分離的展顯邏輯將一個(gè)我們?cè)谄聊簧峡吹降腉UI元素也按照MVC的思想來(lái)解決,提成展現(xiàn)對(duì)象(VIEW)和模型對(duì)象(MODEL)展現(xiàn)對(duì)象,即是封裝后的容器類,用來(lái)直觀的展現(xiàn)數(shù)據(jù)模型對(duì)象,用來(lái)控制展現(xiàn)對(duì)象。一個(gè)領(lǐng)域?qū)ο笸ǔMǔ3钟谐志没畔ⅲ╒O、services)來(lái)培訓(xùn),將展現(xiàn)層數(shù)據(jù)和后臺(tái)持久化服務(wù)連通V依賴M,M不依賴V,一個(gè)M可以服務(wù)多個(gè)VV之間互不依賴,V只和M打交道,對(duì)V的操作會(huì)觸發(fā)M的行為,V對(duì)M的實(shí)現(xiàn)進(jìn)行響應(yīng)M之間假如要進(jìn)行通信,通常設(shè)計(jì)xxxMediator(協(xié)調(diào)者),用來(lái)協(xié)調(diào)M之間信息傳遞自助能動(dòng)的Action元素Action應(yīng)當(dāng)是細(xì)力度的,即功能單一,便于擴(kuò)展Action能自身決定可用性,符合面向?qū)ο蟮奶匦裕ㄟ^(guò)ActionContributors進(jìn)行組織,以方便SpringIOC相應(yīng)用元素的拼裝Composite模式來(lái)實(shí)現(xiàn)組裝統(tǒng)一的UI入口類ToftPanelAdapter,自動(dòng)裝配;Spring依賴注入,XML界面配置組裝視圖層、模型層、和按鈕;TangramLayout靈活布局;常用元素介紹模型層元素appModel均是nc.ui.uif2.model.IAppModel的直接或間接實(shí)現(xiàn)類,不同的業(yè)務(wù)場(chǎng)景有不同的實(shí)現(xiàn),本次只介紹常用的模型模型名稱應(yīng)用場(chǎng)景特點(diǎn)HierachicalDataAppModel存儲(chǔ)有層次關(guān)系的數(shù)據(jù)模型運(yùn)用內(nèi)部維護(hù)的DefaultTreeModel來(lái)存儲(chǔ)樹(shù)型數(shù)據(jù)可以獲得當(dāng)前選中的節(jié)點(diǎn)和選中的數(shù)據(jù)可以發(fā)出MODEL_INITIALIZED、SELECTION_CHANGED以及UISTATE_CHANGED事件BillManageModel存儲(chǔ)平面數(shù)據(jù)的模型應(yīng)用最多的一個(gè)模型支持單行和多行選擇可以發(fā)出MODEL_INITIALIZED、SELECTION_CHANGED、UISTATE_CHANGED、DATA_INSERTED、DATA_DELETED、SELECTED_DATE_CHANGED等事件BatchBillTableModel支持進(jìn)行批量增、刪、改等操作的平面型數(shù)據(jù)模型只有編輯和非編輯兩種狀態(tài)需要配套的服務(wù)類IBatchAppModelService與視圖層元素BatchBillTable配合使用可以發(fā)出MODEL_INITIALIZED、SELECTION_CHANGED、UISTATE_CHANGED、DATA_UPDATED、DATA_DELETED、DATA_INSERTED等事件視圖層元素常見(jiàn)的NC視圖均直接或間接集成自javax.swing.JPanel(JPanel參見(jiàn)JDK_API)常見(jiàn)的如下平面視圖V6產(chǎn)品通常使用nc.ui.pubapp.uif2app.view下的類;特殊視圖(樹(shù)、參照等)通常使用ponents下的類模型名稱應(yīng)用場(chǎng)景特點(diǎn)TreePanel樹(shù)型控件的展現(xiàn)面板與HierachicalDataAppModel模型配合使用,響應(yīng)此模型的事件BillForm表單界面的展現(xiàn)控件運(yùn)用單據(jù)模板的卡片視圖(BillCardPanel)進(jìn)行展現(xiàn),支持單表頭的卡片也支持標(biāo)準(zhǔn)的卡片視圖(聚合VO的上卡片下列表形式)暫時(shí)只與BillManageModel配合,實(shí)現(xiàn)對(duì)模型數(shù)據(jù)的展現(xiàn)以及事件的相應(yīng)在V6中常使用其子類ShowUpableBillFormBill

溫馨提示

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

評(píng)論

0/150

提交評(píng)論