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

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

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

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開(kāi)源團(tuán)隊(duì)

    http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks
          最近要做一個(gè)Python的基于Eclipse的界面設(shè)計(jì)器,因此我對(duì)各種GUI設(shè)計(jì)工具做了一下分析,發(fā)現(xiàn)GUI設(shè)計(jì)工具也有一個(gè)門(mén)派。
          在那個(gè)懵懂的年代,一切界面代碼都是要開(kāi)發(fā)人員手工書(shū)寫(xiě),這無(wú)疑增加了開(kāi)發(fā)難度,Delphi、VB等工具的出現(xiàn)扭轉(zhuǎn)了這個(gè)局面,使用這些工具開(kāi)發(fā)人員只要在控件面板上拖拖拽拽就可以完成界面的設(shè)計(jì),做到了“所見(jiàn)即所得”的開(kāi)發(fā)方式。仔細(xì)分析,GUI設(shè)計(jì)工具有如下幾個(gè)門(mén)派:基于界面文件的純代碼生成、代碼生成與界面文件結(jié)合、無(wú)界面文件方式。

          基于界面文件的純代碼生成:NetBeans是這類(lèi)工具的典型代表(如果我沒(méi)記錯(cuò)的話(huà)JBuilder也是這樣實(shí)現(xiàn)的),NetBeans中與界面設(shè)計(jì)有關(guān)的有兩個(gè)文件:.java文件和.form文件。.form文件中是以XML格式描述界面布局和控件的屬性等信息;.java文件則是通過(guò)解析.form文件生成的代碼,生成的界面代碼主要位于initComponents方法中,這個(gè)方法在NetBeans IDE中是無(wú)法手工編輯的。在用戶(hù)拖拉控件的時(shí)候,NetBeans就將拖拉的控件描述增加到.form文件中,并且即時(shí)將新的代碼生成到.java文件中。這樣實(shí)現(xiàn)的好處有如下幾點(diǎn):IDE實(shí)現(xiàn)容易,IDE的開(kāi)發(fā)人員只要關(guān)注于如何將界面信息轉(zhuǎn)化為.form文件和如何將.form文件解析生成.java代碼即可,無(wú)需關(guān)心用戶(hù)修改.java代碼造成的反向解析問(wèn)題;.java文件可以脫離.form而存在,也就是.form文件只是在設(shè)計(jì)期有意義,而在運(yùn)行期是無(wú)用的。缺點(diǎn)是:用戶(hù)無(wú)法手工修改生成的代碼。
         代碼生成與界面文件結(jié)合:Delphi和VB是這類(lèi)工具的典型代表。以Delphi為例,在Delphi中新建以后界面以后將會(huì)存在兩個(gè)文件:.dfm和.pas,.dfm描述了界面布局和控件的屬性等信息,.pas則定義了控件的變量和事件處理函數(shù)。在編譯的時(shí)候.dfm被編譯到可執(zhí)行文件中,運(yùn)行的時(shí)候動(dòng)態(tài)解析.dfm文件來(lái)構(gòu)建界面。與NetBeans不同的就是.dfm文件是有運(yùn)行期的意義的,如果沒(méi)有.dfm文件文件,程序?qū)o(wú)法編譯運(yùn)行。這樣的方式通常只適用于Delphi、VB這樣代碼和IDE結(jié)合過(guò)于緊密的語(yǔ)言,很難將生成的代碼進(jìn)行手工修改。
      無(wú)界面文件方式:Eclipse的Visual Editor是最經(jīng)典的例子。使用Visual Editor進(jìn)行GUI繪制的時(shí)候,只存在一個(gè).java文件,Visual Editor將用戶(hù)繪制的界面直接解析為.java代碼,如果用戶(hù)修改了.java代碼,Visual Editor會(huì)運(yùn)行一個(gè)虛擬機(jī),在虛擬機(jī)中運(yùn)行用戶(hù)修改后的文件,得到運(yùn)行時(shí)的程序界面,然后將這個(gè)界面繪制到窗口設(shè)計(jì)器中。這樣做可以將所有的界面信息都集成到一個(gè)文件中,并且支持用戶(hù)手工修改生成的代碼;由于設(shè)計(jì)器中的界面是通過(guò)另外一個(gè)虛擬機(jī)運(yùn)行而得到的,在界面設(shè)計(jì)器中看到的界面就是運(yùn)行時(shí)的界面,這樣保證了真正的“所見(jiàn)即所得”。這樣做的壞處也是明顯的,由于需要重新啟動(dòng)一個(gè)虛擬機(jī),導(dǎo)致了速度很慢,資源占用比較高,使用Visual Editor的時(shí)候經(jīng)常造成Eclipse內(nèi)存不足退出。   
     
          我在開(kāi)發(fā)界面設(shè)計(jì)器的早期采用的基于界面文件的純代碼生成方式,系統(tǒng)中有一個(gè).aui文件和對(duì)應(yīng)生成的.py源代碼文件,后來(lái)由于系統(tǒng)需求(主要是要求允許開(kāi)發(fā)人員修改生成的代碼),我就準(zhǔn)備改用無(wú)界面文件方式。如果采用Visual Editor的無(wú)界面文件方式難度是比較大的,而且會(huì)導(dǎo)致資源占用太大,因此我采用了另外一種思路,也就是在內(nèi)存中為每個(gè)界面維護(hù)一個(gè)對(duì)象模型(樹(shù)狀結(jié)構(gòu)),在用戶(hù)繪制界面的時(shí)候去修改這個(gè)對(duì)象模型,在用戶(hù)保存界面的時(shí)候去解析這個(gè)對(duì)象模型生成.py源代碼;在由.py源代碼加載繪制設(shè)計(jì)器中的界面的時(shí)候,首先通過(guò)解析.py 源代碼生成源代碼的抽象語(yǔ)法樹(shù)(AST),然后解析這個(gè)AST生成界面的對(duì)象模型,這樣就可以很輕松的繪制界面了。這樣做不僅有Visual Editor的優(yōu)點(diǎn),而且占用資源比較小;不過(guò)由于手工修改代碼的千差萬(wàn)別,如果開(kāi)發(fā)人員修改的代碼采用了比較生僻的語(yǔ)法,有可能造成用戶(hù)修改的代碼無(wú)法正確的解析為對(duì)象模型,造成.py源代碼加載繪制設(shè)計(jì)器中的界面的時(shí)候發(fā)生異常,解決這個(gè)問(wèn)題的唯一一個(gè)辦法就是建議開(kāi)發(fā)人員盡量采用常用的代碼來(lái)修改生成的界面代碼。
          由于HTML代碼本身就是一個(gè)樹(shù)狀模型,無(wú)需進(jìn)行代碼和模型間的轉(zhuǎn)換,所以網(wǎng)頁(yè)設(shè)計(jì)器就不存在上邊說(shuō)的這些幫派了。

     http://www.cownew.com CowNew開(kāi)源團(tuán)隊(duì) 
     楊中科 email:about521愛(ài)特163.com
    posted on 2007-04-08 17:24 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(3253) 評(píng)論(4)  編輯  收藏

    評(píng)論

    # re: GUI設(shè)計(jì)器們的幫派 2007-04-09 10:09 BeanSoft
    JBuilder 也是解析源碼, 只不過(guò)源碼過(guò)于復(fù)雜就會(huì)解析不了. Visual Editor 也有這種情況, 并不是所有代碼它都能解析出來(lái)的, 確切的說(shuō) VE 是 解析源碼 -> 構(gòu)造界面樹(shù) -> 用 JVM 執(zhí)行然后繪圖 -> 顯示到設(shè)計(jì)器里. 目前來(lái)講 VE 的源碼解析能力還不是很強(qiáng), 很多界面也出不來(lái). 畢竟源碼解析和 JVM 直接執(zhí)行還是有差距的.

    開(kāi)發(fā) IDE 就得搞編譯原理, 語(yǔ)法解析器...沒(méi)辦法. 一直想找個(gè) SWT 的多種語(yǔ)法高亮顯示編輯器, 可惜才疏學(xué)淺, 沒(méi)搞定.  回復(fù)  更多評(píng)論
      

    # re: GUI設(shè)計(jì)器們的幫派 2007-04-12 10:31 amp@java
    SWT-Designer比VE強(qiáng)很多,速度也比較快,不過(guò)價(jià)錢(qián)也比較貴,呵呵  回復(fù)  更多評(píng)論
      

    # re: GUI設(shè)計(jì)器們的幫派 2007-04-30 14:10 ss97kof
    我是菜鳥(niǎo)
    但是我覺(jué)得Python也不是很流行,語(yǔ)法格式方面很郁悶的語(yǔ)言.
    雖然很多優(yōu)點(diǎn)
      回復(fù)  更多評(píng)論
      

    # re: GUI設(shè)計(jì)器們的幫派 2007-05-08 09:39 CowNew開(kāi)源團(tuán)隊(duì)
    這個(gè)東西是公司要求做的,主要是因?yàn)槲覀児舅挟a(chǎn)品向python和java兩種語(yǔ)言靠齊。python其實(shí)是不錯(cuò)的一個(gè)語(yǔ)言,用來(lái)做快速開(kāi)發(fā)特別好,特別是對(duì)二次開(kāi)發(fā)人員,幾乎不用他們學(xué)太復(fù)雜的編程知識(shí),非常傻瓜化,同時(shí)又不失靈活性和強(qiáng)大性。  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 在线观看免费精品国产| 相泽亚洲一区中文字幕| 偷自拍亚洲视频在线观看| 亚洲中文字幕伊人久久无码| 男人的天堂网免费网站| 亚洲熟女综合色一区二区三区| 亚洲AV成人潮喷综合网| 久久久久久毛片免费播放 | 亚洲第一se情网站| 亚洲日本va在线视频观看| 久九九精品免费视频| 一二三四在线观看免费中文在线观看| 亚洲AV电影院在线观看| 国产免费一区二区三区VR| 欧洲人成在线免费| 色www免费视频| 亚洲成a人片在线观看播放| 精品亚洲视频在线观看| 无码一区二区三区免费视频| a级毛片黄免费a级毛片| 亚洲av色香蕉一区二区三区| 亚洲国产高清人在线| 亚洲av片一区二区三区| 91免费精品国自产拍在线不卡| 国产99视频精品免费视频76 | 性xxxx视频免费播放直播| 午夜亚洲国产精品福利| 亚洲三级在线播放| 亚洲va久久久噜噜噜久久狠狠| 啊v在线免费观看| 久久不见久久见中文字幕免费| 免费视频成人手机在线观看网址| 亚洲成av人片在www鸭子| 亚洲精品中文字幕乱码影院| 亚洲欧洲成人精品香蕉网| 免费精品国产自产拍观看| 丁香花在线观看免费观看 | 亚洲精品无码久久一线| 四虎影视永久免费观看地址| 无码av免费毛片一区二区| 日韩人妻无码精品久久免费一|