新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于GEF的MiniGUI可視化開發(fā)工具設(shè)計(jì)

基于GEF的MiniGUI可視化開發(fā)工具設(shè)計(jì)

作者: 時(shí)間:2011-11-21 來(lái)源:網(wǎng)絡(luò) 收藏

3 系統(tǒng)實(shí)現(xiàn)
MVC框架,可以方便地實(shí)現(xiàn)drop/drag、undo/redo、move、delete、resize等圖形編輯器的基本功能,并且提供了常用的布局器,非常適合用于開發(fā)所見即所得的界面編輯器。其中,的EditPart對(duì)應(yīng)MVC中的Controller,F(xiàn)igure對(duì)應(yīng)View。
本工具開發(fā),可以最大限度地減小開發(fā)工作量,增強(qiáng)軟件的穩(wěn)定性。同時(shí),Java開發(fā)使得本工具可以在任何具有Java虛擬機(jī)的系統(tǒng)上運(yùn)行,具有良好的跨平臺(tái)性。
3.1 GEF實(shí)現(xiàn)的界面工具
本工具提供對(duì)菜單、狀態(tài)條、位圖,以及對(duì)話框控件(包括CheckBox, ComboBox,PushButton, RadioButton,MonthCalendar,GridView,M1Edit,ProgressBar,Property-Sheet,Static,StaticBox,TreeView,TrackBar,SpinBox等)的編輯功能。對(duì)于控件的修改,可以通過(guò)屬性頁(yè)和在界面上直接操作來(lái)進(jìn)行。屬性頁(yè)上的編輯通過(guò)IPropertySource接口的setPropertyValue方法告知Model,Model再通過(guò)PropertyChangeSupport類的firePropertyChange方法通知EditPart做出修改;來(lái)自界面上的變化被封裝成request派發(fā)給EditPart,EditPart再通過(guò)command修改Model中的數(shù)據(jù),Model在修改完數(shù)據(jù)之后告知EditPart有數(shù)據(jù)被修改;EditPart收到Property改變的通知后,根據(jù)修改數(shù)據(jù)類型做出相應(yīng)操作(比如重繪figure等)。以對(duì)CheekBox的操作為例來(lái)說(shuō)明基于GEF的控件處理流程,如圖4所示。其中,操作A是從工具箱拖拽一個(gè)新的CheckBox到Dialog中;操作B是通過(guò)屬性頁(yè)修改CheckBox顯示的文本(Text);操作C直接通過(guò)選中CheckBox拖拽改變其大小。操作A1~A4、B1~B3、C1~C3為具體的執(zhí)行流程。

3.2 圖形顯示問(wèn)題
在GEF中,每個(gè)視圖只有在其父視圖的有效范圍內(nèi)才能響應(yīng)交互事件。如果直接按照的控件關(guān)系來(lái)組織模型,則界面工具不能很好地完成與用戶的交互。
以菜單為例,生成中菜單部分的代碼僅需完成一棵樹的遍歷。這棵樹的每個(gè)非葉節(jié)點(diǎn)都是一個(gè)彈出菜單,葉節(jié)點(diǎn)是普通的菜單項(xiàng),根節(jié)點(diǎn)是一個(gè)虛節(jié)點(diǎn),用于串連起整個(gè)菜單,如圖5(a)所示。每個(gè)節(jié)點(diǎn)都被稱作MenuItem。這種樹形結(jié)構(gòu)在GEF顯示時(shí)根據(jù)Model創(chuàng)建的Figure如圖5(b)所示,其中Figure11為Figure1的childFigure。在GEF中,只有childFigure被包含在parentFigure的有效范圍內(nèi),對(duì)childFigure提出的請(qǐng)求才能被其parentFigure派發(fā)給childFigure對(duì)應(yīng)的control-ler,并反映給Model,如圖5(c)所示。顯然樹形結(jié)構(gòu)無(wú)法滿足修改菜單項(xiàng)的需求,因此,在MenuItem構(gòu)成的樹形結(jié)構(gòu)基礎(chǔ)上增加了由MeInu組成的鏈表結(jié)構(gòu),同時(shí)每個(gè)MenuItem都增加一個(gè)指向自己上一級(jí)MenuItem的Par-ent指針,如圖5(d)所示。每個(gè)Menu(ij)記錄包括的所有MenuItem(ij,k),以及創(chuàng)建自己的Menultem(i,j)。MenuItem(ij,k)表示屬于Menu(ij)的第k個(gè)MenuItem,Menu(ij)表示MenuItem(i,j)展開的下級(jí)Menu。所有的Menu組成一個(gè)鏈表,GEF顯示的是這個(gè)鏈表的內(nèi)容,而不是原來(lái)的MenuItem樹。這樣,每個(gè)MenuItem對(duì)應(yīng)的Figure就可以包含在其parentFigure中,相應(yīng)的controller也就能夠收到界面上傳來(lái)的請(qǐng)求。

將MenuItem屬性改變?yōu)镻opUp,可以為其建立下級(jí)子Menu。新建函數(shù)的流程如下(參數(shù)是當(dāng)前屬性修改為PopUp的MenuItem):

為Menu新建一個(gè)MenuItem的函數(shù):



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉