<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    月蝕傳說(shuō)

    浮躁讓人失去理智
    posts - 25, comments - 101, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

    數(shù)據(jù)庫(kù)編輯器雛形

    Posted on 2006-10-09 18:57 Dart 閱讀(1467) 評(píng)論(0)  編輯  收藏 所屬分類: GEF

    ?

    上一章講了一下GEF的大概,這章我講通過(guò)實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)編輯器來(lái)進(jìn)一步說(shuō)一下GEF。實(shí)例代碼下載

    1.需求分析以及建模

    數(shù)據(jù)庫(kù)編輯器,無(wú)非就是利用圖形化的方式,來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的管理。比如,我從畫板上托一個(gè)表格到編輯器上,然后給他加上列,最后通過(guò)模型導(dǎo)出對(duì)應(yīng)的SQL語(yǔ)句,連接數(shù)據(jù)庫(kù)生成對(duì)應(yīng)的表。就這么簡(jiǎn)單。

    讓我們?cè)俜治鲆幌?。一個(gè)建立一個(gè)數(shù)據(jù)庫(kù)表需要什么?首先我們要給這個(gè)表取個(gè)名字,然后給它添加上一些列,而對(duì)于列呢,也要有名字,還要有類型,還要說(shuō)明它是否能為空等等。打住!就這樣得了,我們這里只研究GEF,具體的需求還是以后再說(shuō)吧。下面我們建立這個(gè)模型:

    http://album.sina.com.cn/pic/5414465b0200041d

    讓我們看看這幾個(gè)類:DBBase為基類,具有一個(gè)List對(duì)象,這個(gè)List是放置其子節(jié)點(diǎn)的地方,因?yàn)樵跀?shù)據(jù)庫(kù)中,Schema和表是一對(duì)多的關(guān)系,可以說(shuō)是Schema包含了某一個(gè)表;表和列也一樣,表包含了列,所以我們就先將他們的子對(duì)象放置到他們的基類中。parent表示該類的父對(duì)象。

    Schema表示數(shù)據(jù)庫(kù)本身;Table表示表;Column表示列,這幾個(gè)類直接繼承DBBase,而且沒(méi)有復(fù)寫基類的任何方法。

    先就這樣吧,這幾個(gè)類目前來(lái)看還少很多的屬性和操作,在以后的開(kāi)發(fā)中我會(huì)一一補(bǔ)上。

    2.EditPart

    在上一章我們以及說(shuō)過(guò)了,模型是需要通過(guò)編輯單元進(jìn)行維護(hù)的,而且編輯單元和模型是一一對(duì)應(yīng)的關(guān)系。而這些對(duì)應(yīng)關(guān)系又是通過(guò)什么來(lái)映射的呢,就是通過(guò)一個(gè)叫做EditPartFactory的接口類。我們?cè)趯慓EF程序的時(shí)候,這個(gè)類是必須的,只有它才能把我們的模型和編輯單元聯(lián)系起來(lái)。這個(gè)接口只有一個(gè)方法:createEditPart,這個(gè)方法需要我們返回一個(gè)EditPart,給了我們兩個(gè)參數(shù),其中對(duì)我們來(lái)說(shuō)最有用的參數(shù)就是model,因?yàn)樗褪莻魅氲哪P?,我們就需要通過(guò)這個(gè)模型來(lái)生成對(duì)應(yīng)的EditPart

    看看這幾個(gè)EditPart:

    http://album.sina.com.cn/pic/5414465b0200041e

    DBEditPartBase : 其他幾個(gè)EditPart的基類。雖然沒(méi)有寫什么,但是在以后的后續(xù)開(kāi)發(fā)中將起到很大的作用。

    SchemaEditPart:Schema模型對(duì)應(yīng)的EditPart

    TableEditPart:Table模型對(duì)應(yīng)的EditPart

    ColumnEditPart:Column模型對(duì)應(yīng)的EditPart

    OK,下面開(kāi)始讓我們的模型實(shí)現(xiàn)出來(lái)

    3.準(zhǔn)備工作1——?jiǎng)?chuàng)建我們的Editor

    編輯器嘛,肯定需要擴(kuò)展editor擴(kuò)展點(diǎn)咯(不明白的去看看Eclipse插件開(kāi)發(fā)基礎(chǔ)。什么?你不知道什么是Eclipse插件開(kāi)發(fā)? ……),看看我們擴(kuò)展點(diǎn)怎么寫的:
    ??

    < extension
    ????????
    id ="dbeditor"
    ???????? point
    ="org.eclipse.ui.editors" >
    ?????
    < editor
    ???????????
    class ="gef.example.databasecreator.ui.DbEditor"
    ??????????? icon
    ="icons/sample.gif"
    ??????????? default
    ="false"
    ??????????? name
    ="DBEditor"
    ??????????? id
    ="gef.example.databasecreator.editor2"
    ??????????? extensions
    ="dbtest" />
    ??
    </ extension >

    我們的擴(kuò)展點(diǎn)對(duì)應(yīng)的啟動(dòng)類是gef.example.databasecreator.ui.DbEditor,這個(gè)類是繼承了 GraphicalEditorWithPalette,GraphicalEditorWithPalette是一個(gè)帶有畫板的、GEF提供的編輯器。我們生成了我們的編輯器類后,需要在里面寫上一些必要的代碼。

    首先是在DbEditor的構(gòu)造函數(shù)中,我們需要把EditDomian給它加上,這是必須的,沒(méi)有EditDomain一些都“空了吹”(家鄉(xiāng)話,呵呵),我在第一章講提到過(guò)EditDomain,大家可以看看我以前的文章,里面有對(duì)它的簡(jiǎn)短介紹。?

    public ?DbEditor() {
    ??
    this .setEditDomain( new ?DefaultEditDomain);
    }


    然后我們需要在getPaletteRoot方法中給它返回一個(gè)PaletteRoot,沒(méi)有這個(gè)東西,我們的編輯器將無(wú)法啟動(dòng),因?yàn)楫嫲逯羔槥榭?,無(wú)法進(jìn)行構(gòu)建我們的控件(我會(huì)在后面的文章簡(jiǎn)要說(shuō)一下,Palette和Viewer的關(guān)系)。我們只要返回一個(gè)PaletteRoot就夠了,不需要往它身上加工具按鈕什么的。
    public ??PaletteRoot?createPaletteRoot() {
    ?????
    return ? new ?PaletteRoot();
    }

    ?

    再看看configureGraphicalViewer方法。這個(gè)方法是復(fù)寫基類的,在這里面,我們要對(duì)我們的Viewer進(jìn)行一些設(shè)置:指定根編輯單元和設(shè)置我們的EditPartFactory。根編輯單元屬于一個(gè)比較特殊的編輯單元,它不屬于我們的模型對(duì)應(yīng)的編輯單元。

    特別強(qiáng)調(diào),在復(fù)寫configureGraphicalViewer方法的時(shí)候,需要調(diào)用一下父類原來(lái)的方法,因?yàn)樵诟割惙椒ㄖ?,?chuàng)建了Viewer,并進(jìn)行了一些設(shè)置,如果不復(fù)寫的話,那就要自己動(dòng)手寫了。

    我們?cè)侔盐覀兊腅ditPartFactory注冊(cè)到Viewer中,不然它傻,找不到對(duì)應(yīng)的EditPart :)

    ?

    ? protected ? void ?configureGraphicalViewer()?{
    ????????
    // ?這里需要調(diào)用基類的方法
    ????????super.configureGraphicalViewer();
    ????????GraphicalViewer?viewer?
    = ? this .getGraphicalViewer();
    ????????
    ????????
    // ?設(shè)置根EditPart
    ????????viewer.setRootEditPart( new ?FreeformGraphicalRootEditPart());
    ????????
    ????????
    // ?設(shè)置工廠
    ????????viewer.setEditPartFactory( new ?DBEditPartFactory());
    ????}

    ?

    ? OK,最后一步:把我們的模型告訴給Viewer。在initializeGraphicalViewer方法中,我們生成了一個(gè)Schema對(duì)象,并把它通過(guò)Viewer的setContent方法注冊(cè)進(jìn)去。

    ?

    ? protected ? void ?initializeGraphicalViewer()?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ????????Schema?schema? = ? new ?Schema();
    ????????
    this .getGraphicalViewer().setContents(schema);
    ????}

    ?

    啟動(dòng)一下吧!什么?無(wú)法創(chuàng)建編輯器……

    4.準(zhǔn)備工作2——?jiǎng)?chuàng)建一個(gè)Schema對(duì)應(yīng)的Figure

    剛才不能創(chuàng)建編輯器的原因如下:

    當(dāng)GEF發(fā)現(xiàn)我們?cè)O(shè)置的內(nèi)容是一個(gè)Schema的時(shí)候,它就去找到對(duì)應(yīng)的EditPart,這里是SchemaEditPart,然后調(diào)它的createFigure方法,獲得一個(gè)圖形進(jìn)行顯示。但是我們返回了一個(gè)NULL,所以編輯器就會(huì)創(chuàng)建不起來(lái)。

    我們給它寫一個(gè)簡(jiǎn)單的Figure吧

    ???? protected ?IFigure?createFigure()?{
    ????????
    return ? new ?FreeformLayer();
    ????}

    ?

    這里給了一個(gè)FreeformLayer,這個(gè)Figure一般都作為一個(gè)根圖形存在,可以根據(jù)子Figure的大小數(shù)量,以及Editor本身的大小來(lái)調(diào)節(jié)自身的大小。

    好了,讓我們?cè)賳?dòng)一次!成功,看看吧

    http://album.sina.com.cn/pic/5414465b0200041f

    5.結(jié)束語(yǔ)

    什么都沒(méi)有啊,不要著急,下一章我們?cè)僮屗@示出圖形!


    主站蜘蛛池模板: 国产男女性潮高清免费网站 | 国产久爱免费精品视频| 亚洲人成人无码网www电影首页 | 中文字幕亚洲专区| 久久九九兔免费精品6| 老牛精品亚洲成av人片| 亚洲国产成人久久综合一| 毛片免费在线观看网站| 国产精品免费αv视频| 亚洲免费在线视频播放| 亚洲欧洲中文日韩av乱码| 免费观看无遮挡www的小视频| 黄色毛片免费在线观看| 亚洲视频免费播放| 精品亚洲一区二区三区在线播放| 在线永久免费的视频草莓| 成人片黄网站色大片免费观看cn| 亚洲卡一卡二卡乱码新区| 亚洲精品白浆高清久久久久久| 好吊妞788免费视频播放| 成人黄网站片免费视频| 国产亚洲精品美女| 亚洲乱人伦精品图片| 亚洲精品国产精品乱码不卡√| 精品少妇人妻AV免费久久洗澡| 99精品在线免费观看| 国产精品福利片免费看| 亚洲av无码专区国产不乱码| 亚洲小说区图片区| 亚洲av永久无码精品网站 | 日本成人免费在线| 91九色老熟女免费资源站| 三级毛片在线免费观看| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲成aⅴ人在线观看| 激情综合色五月丁香六月亚洲| 看全色黄大色大片免费久久| 91九色精品国产免费| 久久午夜无码免费| 成人免费一区二区三区| 一级毛片在播放免费|