TWaver基本編程提要_第1頁
TWaver基本編程提要_第2頁
TWaver基本編程提要_第3頁
TWaver基本編程提要_第4頁
TWaver基本編程提要_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

TWaver基本編程2Element的選中機制所有的Element數(shù)據(jù)都可以被選中。選中狀態(tài)是Element的重要狀態(tài)之一,它在實現(xiàn)人機交互過程中非常常用。理解和使用Element選擇,對于熟練掌握TWaver開發(fā)具有重要意義。使用選擇狀態(tài)所有TWaver的Element都有一個選中狀態(tài)。要么選中,要么沒選中,它是一個boolean值。可以使用函數(shù)isSelected/setSelected進行獲取或設置。一個對象處于選中狀態(tài)時,其外觀會有一定的變化,對于不同的組件,這種變化也有所不同。例如,對于拓撲圖組件來說,選中的數(shù)據(jù)會顯示一個高亮外框,而對于樹來說,選中數(shù)據(jù)會有一個高亮的背景框。如下圖。實際上,這些默認的外觀和行為都可以被定制和修改。后續(xù)章節(jié)我們將講述這些用法。使用選擇容器SelectionModelSelectionModel可以成為選擇容器,是一個DataBox附屬的一個容器,它維護著DataBox中所有的被選中的數(shù)據(jù)對象的引用。DataBox作為一個大容器,它負責所有容納其中數(shù)據(jù)的管理。但是,為了讓管理職責更加清晰和明確、易于使用,DataBox還拆分出一些附屬的、相對獨立的小容器,分管不同的任務。選擇容器SelectionModel就是其中一個,專門負責管理數(shù)據(jù)的選中狀態(tài)。其實,Element已經(jīng)有了boolean值標識選中狀態(tài),那為何DataBox還要設置選擇容器進行選中狀態(tài)的管理呢?主要是為了開發(fā)者使用更加方便。舉一個簡單的例子:如果DataBox容納了1萬個節(jié)點,其中有10個被用戶選中,并進行了"刪除"操作。如果沒有選擇容器,我們只能通過遍歷這1萬個節(jié)點來獲得這10個數(shù)據(jù)進行刪除,效率和方便性上都不夠好。而有了選擇容器,則可以直接訪問選擇容器,將其中的10個節(jié)點刪除即可,因為TWaver已經(jīng)保證所有的選中節(jié)點都會出現(xiàn)在選擇容器中。通過選擇容器,還可以通過API對選擇狀態(tài)進行控制。例如,將數(shù)據(jù)加入選擇容器會造成數(shù)據(jù)被選中;清空選擇容器,會取消所有數(shù)據(jù)的選中狀態(tài),等等。當然,選擇容器僅僅負責選擇狀態(tài)的管理。無論對這個容器怎么增、刪、改操作,它僅僅影響數(shù)據(jù)的選中狀態(tài),而不會影響數(shù)據(jù)的其他屬性,更不會導致數(shù)據(jù)從DataBox中被刪除等行為。使用選擇監(jiān)聽器設置右鍵菜單右鍵菜單也成為彈出菜單,本章介紹如何在拓撲圖以及其他圖形組件中使用右鍵菜單。右鍵菜單是一個非常常用的交互方法,通過對數(shù)據(jù)進行選擇、右鍵菜單,可以快速調出上下文有關的操作選項,為軟件使用者提供直觀的交互方法。TWaver中,我們使用一個叫做彈出菜單生成器(PopupMenuGenerator)的接口,來制作各種不同的右鍵菜單。更多關于使用右鍵菜單的例子,請見后續(xù)章節(jié)。這里僅給出一個簡單的例子,讓讀者了解彈出菜單是如何制作出來的。菜單生成器是一個接口,被設置在拓撲圖或其他圖形組件上。一旦設置,當鼠標右鍵點擊圖形組件時,TWaver就會回調這個接口獲得右鍵菜單。TWaver會將當前的一些操作場景傳入,例如被點擊的圖形組件、鼠標事件等等。我們要做的,就是根據(jù)這些信息,動態(tài)的生成需要的右鍵菜單,返回即可。具體的菜單顯示等細節(jié),TWaver會幫我們完成。以下彈出菜單的例子彈出一個菜單,把所有的選中的對象的名字用菜單項顯示出來。代碼被封裝在函數(shù)step4中。privatevoidstep4(){//CreateapopupmenugeneratorPopupMenuGeneratorpopupMenuGenerator=newPopupMenuGenerator(){/***Addtheidentifierofeachoftheselectedobjectstothemenu.*Inthisexample,theitemsaddedtothemenudonothing.*Inarealapplication,youwouldprobablyassociatean*implementationoftheSwingActioninterfacewitheachmenuitem.*/publicJPopupMenugenerate(TViewtview,MouseEventmouseEvent){//Createanemptypop-upmenu.JPopupMenupopMenu=newJPopupMenu();JMenuItemitem;//IftheselectedObjectscollectionisempty,noobjectsareselected.if(tview.getDataBox().getSelectionModel().isEmpty()){popMenu.add("Nothingselected");}else{//Accesstheselectedobjectsfromtheselectionmodel.Iteratorit=tview.getDataBox().getSelectionModel().selection();while(it.hasNext()){Elementelement=(Element)it.next();popMenu.add(element.getName());}}//Ifmenuisempty,returnnull.if(popMenu.getComponentCount()==0){returnnull;}else{returnpopMenu;}}};//Setthepop-upmenugeneratorfornetworkcomponentsnetwork.setPopupMenuGenerator(popupMenuGenerator);}}注意:菜單生成器一旦創(chuàng)建,可以通過方法setPopupMenuGenerator應用在多個圖形組件上。例如,上述popupMenuGenerator可以被同時設置在tree上面或表格上面。這樣,無論在tree、table、拓撲圖上,只要選中同樣的數(shù)據(jù),點擊右鍵彈出的菜單將是完全一模一樣的,而且我們無需編寫多個菜單生成器。添加鼠標和鍵盤動作拓撲圖是JavaSwing組件的擴展。和其他Swing組件一樣,在Network上添加鼠標、鍵盤動作是很容易的。唯一需要注意的一點是,拓撲圖并非一個簡單JComponent那么簡單,它由工具條、滾動窗、畫布等部分組成。所以,實際上我們一般添加動作都是針對畫布的,而不是Network本身。所以,要使用network.getCanvas()方法先獲得畫布對象。然后,就可以像其他Swing組件那樣添加各種監(jiān)聽器了。為了演示,我們在例子中添加一個雙擊動作,彈出消息框顯示被雙擊的數(shù)據(jù)對象。這段代碼被封裝在函數(shù)step5中。privatevoidstep5(){network.getCanvas().addMouseListener(newMouseAdapter(){publicvoidmouseClicked(MouseEvente){if(e.getClickCount()==2){//gettheelementthemouseclicked.Elementelement=network.getElementPhysicalAt(e.getPoint());Stringmessage;if(element==null){message="Youclickednothing.";}else{message="Youclicked'"+element.getName()+"'";}JOptionPane.showMessageDialog(network,message);}}});}運行程序如下圖。雙擊空白區(qū)和雙擊對象,都會彈出消息。此外,為了方便開發(fā)者對鼠標事件進行更直觀的監(jiān)聽,TWaver添加了很多經(jīng)過封裝的鼠標監(jiān)聽方法:TNetwork.addElementDoubleClickedActionListener:添加Element雙擊事件監(jiān)聽器。TNetwork.addBackgroundDoubleClickedActionListener:添加空白區(qū)域雙擊事件監(jiān)聽器。TNetwork.addElementClickedActionListener:添加Element單擊事件監(jiān)聽器。通過這些高度封裝的方法,監(jiān)聽鼠標事件就更加方便了。處理數(shù)據(jù)選擇這一節(jié)將介紹如下內容:控制選擇;監(jiān)聽選擇變化;移動拓撲圖以便選中數(shù)據(jù)處于可見位置;由于選擇容器是DataBox的一個組成部分,所以所有共享同一個DataBox的圖形組件也共享同一套數(shù)據(jù)選擇狀態(tài)。也就是說,一個對象被選擇,是在數(shù)據(jù)層決定的,它在所有與DataBox相連的圖形組件上都會體現(xiàn)出來。如果對選擇變化進行監(jiān)聽,則從DataBox的選擇容器進行加裝監(jiān)聽器。每次選擇發(fā)生變化,事件會被發(fā)送到所有監(jiān)聽器。我們可以在監(jiān)聽器中寫代碼執(zhí)行各種任務。為了展示這個功能,我們創(chuàng)建一個監(jiān)聽器,當用戶從tree選擇一個數(shù)據(jù)后,拓撲圖也會顯示選中數(shù)據(jù),并且如果這個選中的數(shù)據(jù)不在可見區(qū)域內,會自動滾動畫布以保證數(shù)據(jù)處于可見視野內。這部分代碼被封裝在step6函數(shù)中。privatevoidstep6(){//createaselectionlistener.DataBoxSelectionListenerlistener=newDataBoxSelectionListener(){publicvoidselectionChanged(DataBoxSelectionEvente){//getthelastselectedelementandmakeitvisible.Elementelement=e.getBoxSelectionModel().lastElement();if(element!=null){network.ensureVisible(element);}}};box.getSelectionModel().addDataBoxSelectionListener(listener);}無選中一個數(shù)據(jù)從tree被選中添加告警這一節(jié)介紹如何在數(shù)據(jù)上使用告警。TWaver提供了綜合、全面、強大的告警支持,以簡化電信管理軟件的開發(fā)復雜度。TWaver提供了許多關于告警方面的圖形渲染屬性,用于控制告警的呈現(xiàn)。當告警發(fā)生后,對應的數(shù)據(jù)就會以相應的方式進行繪制和渲染,以便用直觀、易于理解的方式提醒用戶。每一個Element對象都有一個告警狀態(tài)表AlarmState。這是一個告警信息表,記錄了所有發(fā)生在Element上面的告警信息。要為數(shù)據(jù)添加告警,首先要獲得告警狀態(tài)表,然后在其中添加告警信息即可。數(shù)據(jù)會在拓撲圖、樹等圖形組件上做出相應的顯示變化。另外,還可以使用DataBox提供的告警傳播機制。TWaver默認提供了一個功能完善的告警傳播器,可以將告警沿著父對象的路徑進行傳播。也可以編寫符合自己業(yè)務規(guī)則的告警傳播器,設置在DataBox上使用。這里,我們對前面創(chuàng)建的數(shù)據(jù)添加一些告警,代碼被封裝在step7函數(shù)中。privatevoidstep7(){//createandsetasummingpropagatortothedatasource,//herewillmaketheboxpropagatealarmstoitsparent.box.setAlarmPropagator(newSummingAlarmPropagator());//getaportintheequipmentrack.PortnodeA=(Port)box.getElementByID("0:0");AlarmStatealarmState=nodeA.getAlarmState();//addanacknowledgedalarmwithcriticalseverity.alarmState.addAcknowledgeAlarm(AlarmSeverity.CRITICAL);//addandnewalarmwithmajorseverity.alarmState.addNewAlarm(AlarmSeverity.MAJOR);//getanotherport.PortnodeB=(Port)box.getElementByID("3:3");alarmState=nodeB.getAlarmState();//add10newalarmswithcriticalminor.alarmState.increaseNewAlarm(AlarmSeverity.MINOR,10);}上圖顯示了告警傳播的路徑。從樹、拓撲圖上都可以顯示出告警的傳播方式、告警傳播后的呈現(xiàn)方法。更多關于使用告警的介紹,在后續(xù)章節(jié)有詳細描述。添加裝飾圖標TWaver支持在各種數(shù)據(jù)對象上附著顯示一些動態(tài)圖標,用來表示一些動態(tài)的網(wǎng)絡事件信息。例如,一個設備出了告警之外,還有一些其他并不像告警那么嚴重的時間信息,這些信息也需要用一種非常直觀、醒目的方式顯示出來提示用戶。這種情況下,可以使用Attachment附件機制。裝飾圖標就是一種附件,它用一個小圖標來表示某些事件的發(fā)生,并顯示在對應的宿主對象邊緣,用于顯示一些網(wǎng)絡上發(fā)生的動態(tài)事件和信息。TWaver默認提供了一些預定義的裝飾圖標,可以直接使用。這些都被IconAttachmentHolder類進行統(tǒng)一管理。擴展新的裝飾圖標也很簡單。我們通過代碼進行演示如何操作。首先,我們需要一個小圖標:,然后我們定義一個新的裝飾圖標并進行注冊,然后讓它顯示在某一個Element上面。裝飾圖標從IconAttachment進行繼承,我們重載構造函數(shù),指定我們的圖標即可。新的裝飾圖標需要是一個頂級類,我們推薦用publicstatic來定義,或者放入單獨的一個文件中TUIManager.registerAttachment方法進行注冊,這樣在運行過程中,就可以用element.addAttachment方法顯示裝飾圖標了。這段代碼被封裝為step8://defineanewLayoutedIconAttachment.//Itmustdefineaspublicstaticclass.publicstaticclassMyIconAttachmentextendsIconAttachment{publicMyIconAttachment(Stringname,ElementUIui){super(name,ui,TWaverUtil.getImageIcon("myIcon.png"));}}privatevoidstep8(){StringiconName="document";TUIManager.registerAttachment(iconName,MyIconAttachment.class);//puta"document"icononelementB.Elementelement=box.g

溫馨提示

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

評論

0/150

提交評論