kermart

          k

           

          2012年7月20日

          Eclipse版本、插件介紹

          Eclipse IDE for Java Developers 是Eclipse的platform加上JDT插件,用來java開發(fā)的

          Eclipse IDE for Java EE Developers 應(yīng)該是Eclipse的platform加上WTP插件,用來java企業(yè)級開發(fā)的

          Eclipse IDE for C/C++ Developers 是Eclipse的platform加上CDT插件,用來做C和C++開發(fā)的

          Eclipse for RCP/Plug-in Developers 是Eclipse的SDK,主要用來插件開發(fā)

          Eclipse Classic 就是原來的Eclipse,是Eclipse的基本版,還是主要用來開發(fā)java

          Eclipse的功能是通過插件來實(shí)現(xiàn)的,下面了解主要插件的功能。

          JDT(Java Development Tools):Java設(shè)計工具。
          PDT:用于開發(fā)PHP語言的工具。
          C/C++ IDE:用于設(shè)計C/C++項(xiàng)目。
          PDE(Plugin Development Environment):插件設(shè)計環(huán)境,用于設(shè)計自定義插件。
          Platform:Eclipse的核心運(yùn)行平臺。
          EMF(Eclipse Modeling Framework):Eclipse模型框架。
          GEF(Graphical Editor Framework):圖形編輯框架,用于輔助圖形設(shè)計。
          UML2:UML編輯器。

          WTP(Web Tools Platform ):是一個開發(fā)J2EE Web應(yīng)用程序的工具集。WTP包含以下工具:
               * 一個源碼編輯器可以用來編輯HTML, Javascript, CSS, JSP, SQL, XML, DTD, XSD, 和WSDL。
               * 一個圖形編輯器用來編輯XSD與WSDL。
               * J2EE項(xiàng)目構(gòu)建器和一個J2EE向?qū)Чぞ摺?br />     * 一個Web服務(wù)創(chuàng)建向?qū)Ш凸芾砥鳎蚖S-I 測試工具。
               * 一個數(shù)據(jù)庫訪問,查詢工具等。
            WTP由兩個子項(xiàng)目構(gòu)成:WST(Web標(biāo)準(zhǔn)工具集) 與JST(J2EE標(biāo)準(zhǔn)工具集)
          VE(Visual Editor):可視化圖形編輯組件,用于提供AWT/SWT/Swing的圖形編輯。
          J2EE Standard Tools:用于設(shè)計J2EE應(yīng)用程序的插件。
          WST-Web Standards Tools:用于設(shè)計Web應(yīng)用程序的插件。
          Eclipse Test and Performance Tools Platform:用于調(diào)試,單元測試和測試項(xiàng)目的插件。
          Business Intelligence and Reporting Tools(BIRT):商業(yè)智能和商業(yè)報表開發(fā)插件,它包括ChartEngine(圖形引擎)、Report Framework(報表框架)、Runtime ENV(運(yùn)行時環(huán)境)。
          AJDT-AspectJ Development Tools:用于開發(fā)AOP(面向方面編程)的開發(fā)Eclipse插件。
          AspectJ:用于開發(fā)AOP的開發(fā)環(huán)境。
          CME(Concern Manipulation Environment):用于開發(fā)AOP的一組可視化工具插件。

          posted @ 2012-07-26 14:32 kermart 閱讀(314) | 評論 (0)編輯 收藏

          分層Pane結(jié)構(gòu)與Swing組件高級特性的實(shí)現(xiàn)

            這個題目起的有點(diǎn)難懂,但也實(shí)在想不出更好的題目來。所謂分層Pane結(jié)構(gòu)是指JFrame/JApplet/JDialog等Swing頂層容器的JRootPane/JLayeredPane/GlassPane/ContentPane結(jié)構(gòu)。所謂Swing組件高級特性其實(shí)是指某些組件的特殊功能的實(shí)現(xiàn),比如彈出菜單、Tooltip、JComboBox的下拉窗口、Drag and Drop實(shí)現(xiàn)、Docking Pallete窗口等等。這些特性同普通組件不同,它們往往需要動態(tài)的變化、覆蓋其他組件,它們之間存在一定層次關(guān)系。那么Swing中是怎么樣實(shí)現(xiàn)這些功能呢?
            一直以來想寫一篇文章來描述這個關(guān)鍵結(jié)構(gòu),但每次總被自己的語言表達(dá)能力所限制。Swing這個精巧結(jié)構(gòu)是我嘆服的原因之一。雖然一般的GUI系統(tǒng)設(shè)計原理我都知道,但是細(xì)節(jié)如此處精細(xì)卻不是一開始就能清楚的。我在2000年以前曾經(jīng)寫過大量基于AWT Canvas的自定義組件,當(dāng)時認(rèn)為Swing的自定義組件也不過如此,原理不過也是給我一個刷子,我給你畫出來。但是上述所說的這些特性,卻從來沒能實(shí)現(xiàn)過。我想過很多方法,做過很多實(shí)驗(yàn),但終究沒有想透這一層。之后某次偶然機(jī)會,看到了下面這張著名的圖,使我豁然開朗。讓我又一次理解了創(chuàng)新需要跳出舊的思維模式勇氣和智慧。

            簡單來說Swing中這些頂層容器的多Pane結(jié)構(gòu)是實(shí)現(xiàn)這些特性的基礎(chǔ)。這些Pane實(shí)際是一些特殊的JComponent,它們之間存在包含被包含、覆蓋被覆蓋的樹狀多層次結(jié)構(gòu)。我重新畫了上面這張圖,使得其更具體、更直觀,更容易理解些:

          其實(shí)有了這張圖,加上圖形系統(tǒng)中Z-order的概念,就不難理解并實(shí)現(xiàn)上面提到的特性。Z-order概念和圖形學(xué)中Z深度是一致的。離觀察點(diǎn)近的物體總是會遮擋離觀察點(diǎn)遠(yuǎn)的物體。物體所在法平面離觀察點(diǎn)的距離就是所謂Z深度。Swing中通過先畫出Z-order遠(yuǎn)(小)的組件,再畫Z-order近(大)的組件的方法實(shí)現(xiàn)組件之間的遮擋關(guān)系。每個組件所在平面的都有一個數(shù)字描述其位置,這個位置同三維坐標(biāo)系中的Z軸類似,離觀察者越近,坐標(biāo)越大:

            Swing的頂層容器都包含有一個JRootPane,該JRootPane是一切Swing組件起點(diǎn)。JRootPane中包含了一個JLayeredPane和一個GlassPane。GlassPane和JLayeredPane都是充滿JRootPane的。GlassPane缺省情況下是不可見的,因此我們看到都是JLayeredPane。GlassPane如果是可見的,它Z-order大于任何其他組件,因此它會覆蓋住整個窗口,使得所有的鼠標(biāo)事件都被它截獲。另外通常可見情況下它是透明的,因此你能仍然看到JLayeredPane上面的一切,但是JLayeredPane上面的組件都得不到鼠標(biāo)事件。
          GlassPane這個奇怪的組件主要是用來實(shí)現(xiàn)Drag & Drop以及跨組件渲染用的。NetBeans和Eclipse中哪種常見的Docking Frame的實(shí)現(xiàn)就和這種組件相關(guān)。這些工程、文件、源代碼的窗口其實(shí)不過是普通的Swing組件,它們本身并不能實(shí)現(xiàn)這種拖拽功能。鼠標(biāo)在它們上面標(biāo)題欄區(qū)域按下之后,標(biāo)題欄組件會檢測到這種事件,經(jīng)過粘連性判斷后,如果發(fā)現(xiàn)這些鼠標(biāo)事件目的是拖拽窗口,這種Docking系統(tǒng)就會將拖拽區(qū)域(即所謂的ClientArea)的GlassPane設(shè)置為可見,于是下面的一些列拖拽鼠標(biāo)事件就被這個GlassPane所接管了過去。GlassPane是覆蓋于應(yīng)用程序ClientArea的透明組件,它處理這些事件時計算出當(dāng)前鼠標(biāo)位置所蘊(yùn)含著的拖拽動作,并根據(jù)這些動作畫出相應(yīng)的焦點(diǎn)矩形。NetBeans的Docking Framework一個拖拽過程如下圖所示.注意GlassPane是背景透明的,所以可以在上面畫背景透明的焦點(diǎn)矩形:

            JLayeredPane是實(shí)現(xiàn)彈出式窗口或類似Pallete浮動窗口的主要組件。如同它的名字一樣,它將自己的內(nèi)部結(jié)構(gòu)也分成許多亞層。在使用它的add(Component, Object)方法加入組件時,第二個參數(shù)是一個Integer值,這個值決定了加入的層。這個值相當(dāng)于前面所說的Z-order值。目前主要有下面幾個預(yù)定義值:
          public final static Integer DEFAULT_LAYER = new Integer(0);
          這層加入的缺省層。
            public final static Integer PALETTE_LAYER = new Integer(100);
          這層是定義Palette窗口的層。那種浮動選項(xiàng)窗口屬于這一層。
            public final static Integer MODAL_LAYER = new Integer(200);
          這層是模態(tài)對話框的層。這個模態(tài)對話框應(yīng)該是指JInternalFrame的模態(tài)對話框,而不是JDialog。
            public final static Integer POPUP_LAYER = new Integer(300);
          這層是菜單、下拉框窗口、Tooltip等窗口浮動的層。
            public final static Integer DRAG_LAYER = new Integer(400);
          這一層是拖拽層,組件可以在這一層被托拽。
            public final static Integer FRAME_CONTENT_LAYER = new Integer(-30000);
          這一層是ContentPane和MenuBar所在的層。注意它非常小,前面所有層的組件都會覆蓋這一層的組件。我們知道ContentPane是所有應(yīng)用程序組件所在的地方。
            JLayeredPane直接包含有ContentPane組件。應(yīng)用程序如果定了MenuBar,JLayeredPane還包含MenuBar。注意JLayeredPane本身沒有布局管理器,它對組件的布局是由它的父容器JRootPane的布局管理器RootLayout來完成的。簡單來說,所在層數(shù)值小的組件有可能被高層組件所覆蓋。Swing將不同類型的組件放置在不同層面上,就實(shí)現(xiàn)了文章一開始提到的特性:菜單、浮動窗口、下拉框窗口和Tooltip等。當(dāng)然這些窗口有可能不是JLayeredPane上的輕量級Swing組件,當(dāng)它們的邊界超過頂層容器的窗口時,這些窗口的就變成了重量級AWT窗口。這在上一篇文章《如何混排Swing和AWT組件中已經(jīng)提到過。
            下面是這些Pane組件之間的樹狀包含關(guān)系圖:

            本文的目的是講述Swing的這種組件層次結(jié)構(gòu),并不是講述如何使用JLayeredPane和GlassPane來實(shí)現(xiàn)某中特殊的功能。如果需要學(xué)習(xí)如何使用它們實(shí)現(xiàn)某些特殊效果,Java Tutorial的Swing部分提供了詳盡的編程資料。Java Tutorial的Swing部分編程在:
            如何使用RootPane、GlassPane和JLayeredPane分別見下面的章節(jié):

          posted @ 2012-07-26 11:21 kermart 閱讀(1245) | 評論 (0)編輯 收藏

          NetBeans中自動生成JFrame的布局管理器

          NetBeans自動生成的JFrame窗體默認(rèn)使用了自由設(shè)計的布局GroupLayout。


             默認(rèn)添加的面板(JPanel)等容器也都是用了自由布局GroupLayout方式。


              這將導(dǎo)致我們自己在代碼中動態(tài)添加的組件無法顯示在窗體上,因此需要手工重設(shè)容器的布局方式。(對需要動態(tài)添加的組件,可以先畫一個面板,重設(shè)布局,再在面板上添加自己的組件。)(即重新彈出一個窗口)


               NetBeans對GridBagLayout提供了可定制的布局,對GridLayout,BorderLayout,FlowLayout也有比較好的支持。絕對布局,需要NetBeans的包支持,不建議使用。


               對BoxLayout支持不夠好,不可調(diào)間隙。自由布局和NULL布局,不會自動適應(yīng)窗體變化。


               由于GridBagLayout布局在改變窗體大小的時候,可以基本保持原形,建議在NetBeans中設(shè)計窗體時使用GridBagLayout布局,也可以結(jié)合GridLayout,BorderLayout,FlowLayout進(jìn)行布局

          posted @ 2012-07-26 11:02 kermart 閱讀(1787) | 評論 (0)編輯 收藏

          Freemarker

          廣大 Freemarker 用戶可以更深入地了解一下 Freemarker  


          FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫

          FreeMarker被設(shè)計用來生成HTML Web頁面,特別是基于MVC模式的應(yīng)用程序

          雖然FreeMarker具有一些編程的能力,但通常由Java程序準(zhǔn)備要顯示的數(shù)據(jù),由FreeMarker生成頁面,通過模板顯示準(zhǔn)備的數(shù)據(jù)



          FreeMarker不是一個Web應(yīng)用框架,而適合作為Web應(yīng)用框架一個組件

          FreeMarker與容器無關(guān),因?yàn)樗⒉恢繦TTP或Servlet;FreeMarker同樣可以應(yīng)用于非Web應(yīng)用程序環(huán)境

          FreeMarker更適合作為Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標(biāo)記庫

          FreeMarker是免費(fèi)的

          而且你還可以通過Eclipse的插件來編輯FreeMarker,經(jīng)過驗(yàn)證,F(xiàn)reeMarker 最好的 Eclipse 編輯插件是 JBoss Tools

          FreeMarker特性

          1、通用目標(biāo)

          能夠生成各種文本:HTML、XML、RTF、Java源代碼等等

          易于嵌入到你的產(chǎn)品中:輕量級;不需要Servlet環(huán)境

          插件式模板載入器:可以從任何源載入模板,如本地文件、數(shù)據(jù)庫等等

          你可以按你所需生成文本:保存到本地文件;作為Email發(fā)送;從Web應(yīng)用程序發(fā)送它返回給Web瀏覽器

          2、強(qiáng)大的模板語言

          所有常用的指令:include、if/elseif/else、循環(huán)結(jié)構(gòu)

          在模板中創(chuàng)建和改變變量

          幾乎在任何地方都可以使用復(fù)雜表達(dá)式來指定值

          命名的宏,可以具有位置參數(shù)和嵌套內(nèi)容

          名字空間有助于建立和維護(hù)可重用的宏庫,或者將一個大工程分成模塊,而不必?fù)?dān)心名字沖突

          輸出轉(zhuǎn)換塊:在嵌套模板片段生成輸出時,轉(zhuǎn)換HTML轉(zhuǎn)義、壓縮、語法高亮等等;你可以定義自己的轉(zhuǎn)換

          3、通用數(shù)據(jù)模型

          FreeMarker不是直接反射到Java對象,Java對象通過插件式對象封裝,以變量方式在模板中顯示

          你可以使用抽象(接口)方式表示對象(JavaBean、XML文檔、SQL查詢結(jié)果集等等),告訴模板開發(fā)者使用方法,使其不受技術(shù)細(xì)節(jié)的打擾

          4、為Web準(zhǔn)備

          在模板語言中內(nèi)建處理典型Web相關(guān)任務(wù)(如HTML轉(zhuǎn)義)的結(jié)構(gòu)

          能夠集成到Model2 Web應(yīng)用框架中作為JSP的替代

          支持JSP標(biāo)記庫

          為MVC模式設(shè)計:分離可視化設(shè)計和應(yīng)用程序邏輯;分離頁面設(shè)計員和程序員

          5、智能的國際化和本地化

          字符集智能化(內(nèi)部使用UNICODE)

          數(shù)字格式本地化敏感

          日期和時間格式本地化敏感

          非US字符集可以用作標(biāo)識(如變量名)

          多種不同語言的相同模板

          6、強(qiáng)大的XML處理能力

          <#recurse> 和<#visit>指令(2.3版本)用于遞歸遍歷XML樹

          在模板中清楚和直覺的訪問XML對象模型



          posted @ 2012-07-20 11:46 kermart 閱讀(975) | 評論 (0)編輯 收藏

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仙居县| 萝北县| 宜丰县| 许昌市| 威信县| 衡东县| 阿勒泰市| 德令哈市| 江都市| 蓬莱市| 金川县| 石阡县| 乌恰县| 石家庄市| 海阳市| 富阳市| 霸州市| 科尔| 玉龙| 拜城县| 中西区| 富顺县| 潼南县| 即墨市| 襄汾县| 西吉县| 颍上县| 丁青县| 金阳县| 海伦市| 那曲县| 达拉特旗| 永胜县| 乌海市| 乐陵市| 宁强县| 玛纳斯县| 宜兴市| 兖州市| 增城市| 华亭县|