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

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

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

    river_hiter

    初次感受SWT

    ?????? 由于無法忍受AWT或SWING的怪異界面和蝸牛般的速度,最近起了學(xué)習(xí)SWT的沖動。SWT(Standard? Widget? Toolkit)是由IBM推出的基于JAVA的圖形界面開發(fā)庫,之所以要說他是“基于JAVA的”的是因為在程序元編寫代碼時使用的JAVA語言,然而事實上,swt的底層代碼是由C語言來實現(xiàn)的,這點可以從Swt為什么要發(fā)布基于windows,linux……的操作系統(tǒng)的不同的包體現(xiàn)出來。swt比起awt和swing來說,不可同日而語,并且swt具有很好的穩(wěn)定性,他最大化了操作系統(tǒng)的圖形構(gòu)件API,只要操作系統(tǒng)提供了相應(yīng)的圖形構(gòu)件,swt會用JNI技術(shù)去調(diào)用他們,只有在那些操作系統(tǒng)中不存在的圖形構(gòu)件,swt才回去實現(xiàn)他們。
    ??? public class FirstSwt{
     public static void main(String [] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      shell.open();
      // 開始事件處理循環(huán),直到用戶關(guān)閉窗口
      while (!shell.isDisposed()) {
       if (!display.readAndDispatch())
        display.sleep();
      }
      display.dispose();
     }
    }
    這是一個swt最基礎(chǔ)的程序,也是一個很基礎(chǔ)的模式,程序中首先定義了用Display display = new Display();定義了一個容器(component),然后用Shell shell = new Shell(display);定義了一個窗口(window),display是一個最大的容器,在此容器上可以放置很多shell,類似于awt的思想,每個組件自然就應(yīng)該放置在shell中了。接下來的shell.open()將該shell打開,只有將shell打開之后,基于此shell上的組件才能被顯示出來。接下來的語句就是一個處理這個shell中事件的語句,在shell沒有被關(guān)閉前(shell.isDisposed()),系統(tǒng)會將所有的事件從事件隊列中取出,然后一個一個處理,如果沒有事件發(fā)生,則該display就處于sleep狀態(tài),等待事件發(fā)生后將其喚醒。當(dāng)shell關(guān)閉后,程序也就退出了。

    posted on 2006-11-08 21:36 何晏成 閱讀(2246) 評論(23)  編輯  收藏

    Feedback

    # re: 初次感受SWT 2006-11-09 09:27 hhh

    如果你非要這么說,
    那么我也可說SWT在重用和靈活性方面不可和swing同日而語!

    swing靈活和重用的藝術(shù) renderer/editor

      說到GUI類庫的重用有一個很著名的模式:Composite模式。對,一個現(xiàn)代面向?qū)ο驡UI類庫基本上都有這個模式的實現(xiàn),當(dāng)然也包括swing.不過早一點如MFC就沒有完整的實現(xiàn),現(xiàn)在來看如果一個GUI類庫連基本的Composite模式都沒有實現(xiàn)基本上感覺是出土的文物啦!
         但是我們來看即便有了Composite模式,但Composite模式通常是構(gòu)建靜態(tài)組合,如果要動態(tài)的替換一個復(fù)合組件內(nèi)部的子元素如何辦呢?如此一來這個組件就只能定義自己的布局形式,而不能定死在這個布局形式內(nèi)的元素。
         其實從用戶角度來說一個GUI元素通常就是兩種情況要么就是表現(xiàn),要么就是處于和用戶交互狀態(tài),這是它們的形態(tài)通常不一樣。所以組件不僅僅要只定義自己的布局形式,還要給于外部機(jī)會來配置當(dāng)自己的子元素處于這兩種狀態(tài)時相應(yīng)的UI組件是什么!
        
        swing通過renderer/editor達(dá)到了這種靈活性。如swing中JTable,JList,JTree等組件都只是定義了自己的布局形式。并且都可以配置renderer/editor,這樣你的renderer/editor實現(xiàn)就接管了組件里面元素的表現(xiàn)形式和交互形態(tài)。理論上你可以用任何JComponent作為組件里面元素的表現(xiàn)形式和交互形態(tài)。其靈活性和重用性達(dá)到了一個巔峰!
        
        以前還聊過一個JTable的例子!
        http://www.douban.com/group/topic/1112689/



    http://www.douban.com/group/topic/1261109/  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 09:32 hhh

    Swing是MVC設(shè)計的典范
    不管你的項目是否用到了Swing技術(shù),我都要說,Swing是一個設(shè)計優(yōu)秀的Java包,它充滿了大師的智慧。如果你學(xué)了Java卻連一個 Button還不會寫,就象你學(xué)習(xí)Visual Basic卻不會用Button,那可絕對是不能被原諒的。Swing技術(shù)的應(yīng)用已經(jīng)在國外大行其道,由于java的免費(fèi)、易學(xué)以及大家對于java技術(shù)的充分信賴,好多公司早早的就把應(yīng)用程序的一切,從后臺服務(wù)到前臺人機(jī)交互界面,統(tǒng)統(tǒng)移到了java開發(fā)上。Swing出現(xiàn)了快10年了,憑借其先進(jìn)的設(shè)計思想,一直未曾落后于哪種語言的界面開發(fā)技術(shù),使用和理解Swing的設(shè)計思想,對軟件開發(fā)者大有裨益。
      
      Swing的設(shè)計是MVC的典范。雖然MVC的概念有點泛濫,可是真正能夠理解并熟練掌握、在設(shè)計和開發(fā)里面自然流露的并不多見。記得用VC ++開發(fā)程序時候,MFC向?qū)б彩巧蒁ocument和View兩個類,當(dāng)時一直奇怪為什么這么繞圈子。再看Swing的設(shè)計,則到處充滿了MVC的痕跡。仔細(xì)研究Swing中事件監(jiān)聽、Model-View分離、Renderer/Editor機(jī)制、可插拔的LookAndFeel等機(jī)制,簡直就是一門藝術(shù),充滿了美感。而如果你非常痛恨這些設(shè)計并覺得他們怪異,很可能你是剛從VB或者Delphi轉(zhuǎn)過來,這些快速開發(fā)工具幫助了你也“害”了你。
      
      Swing設(shè)計的不錯,不過可能過度學(xué)術(shù)化的設(shè)計也使得Swing跑起來并不靈巧,學(xué)習(xí)難度也大。這客觀上確實使得Swing一直沒有被廣泛使用,而且廣受詬病。記得以前“Swing有什么成功的應(yīng)用嗎?”之類的帖子一直是熱門話題。IBM等則趁機(jī)抓住小辮子弄了SWT吸引了不少人,使得 Java GUI技術(shù)面臨分裂的危險。
      
      不過隨著JAVA的不斷升級和優(yōu)化,Swing的速度一直在提高,美觀性也在改善,基于Swing的成功應(yīng)用也越來越多了。關(guān)于Swing是否消亡或被SWT代替或是否能作桌面應(yīng)用的爭論逐漸少了。不過喜歡并精通Swing技術(shù)的開發(fā)者,尤其在國內(nèi),依舊非常少。
      
      好在情況在轉(zhuǎn)好。Sun正意識到Eclipse和SWT所帶來的威脅,下了大力氣發(fā)展NetBeans,其最新版本對Swing GUI可視化設(shè)計的支持已經(jīng)超過了所有對手,其Rich Client框架也走向成熟,這對Swing的發(fā)展和應(yīng)用是一個很大的推動。隨著WEB熱潮的減退,人們又更多的開始理性的思考B/S和C/S架構(gòu)的選擇,某些領(lǐng)域Swing技術(shù)已經(jīng)成為首選的解決方案。隨著JGoodies、JIDE、TWaver等優(yōu)秀Swing產(chǎn)品的不斷涌現(xiàn),Swing會以更快速度在桌面應(yīng)用中普及。   回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 09:34 hhh

    看JFace與Swing MVC的M

    在JFace的ContentViewer抽象中下面的三個方法反映它對待模型的思路:
      public void setContentProvider(IContentProvidercontentProvider)
      
      public void setInput(Object input)
      
      
      public void setLabelProvider(IBaseLabelProvider labelProvider)
      
      顯然setInput是用來配置view背后的數(shù)據(jù),從它的參數(shù)類型(Object)來講應(yīng)該是你的與view無關(guān)的領(lǐng)域模型.
      
      從這里就可以看出它和swing的根本差異.swing各種不同viewer(在swing的世界叫JComponent)背后的模型是因不同組件而不同的,模型的接口是反應(yīng)了該組件特征的.
      如 JTable 背后的TableModel,TableModel接口的定義基本表達(dá)了作為一個二維表格期望獲得數(shù)據(jù)的方式如TableModel中有定義這樣的方法:
      Objetc getValueAt(int row,int column)
      
      在JFace中直接可以放入Object類型數(shù)據(jù),但各種viewer不一樣對于拿數(shù)據(jù)的期望也不一樣,
      ContentProvider,LabelProvider解決了上述問題,不同ContentProvider定義了該viewer所期望的拿數(shù)據(jù)的接口,其實我覺得swing中的model在意義上類似于ContentProvider.
      
      其實感覺JFace的做法在盡量強(qiáng)制你必須構(gòu)建獨立于GUI的模型.
      而swing的話并沒有這種侵入性,你可以直接實現(xiàn)viewer的模型接口如
      
      class Mymodel implenents TableModel{
      
      }
      
      也可以定義比較獨立的模型然后用對象適配器模式將它們適配到viewer model上!   回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 09:37 hhh

    在靈活性和重用性方面還未見過哪個工業(yè)界的GUI庫可以與swing比肩。
    swing的設(shè)計充滿了OO的藝術(shù)!
    有人說從很多角度來看swing都是一件藝術(shù)品,swing非常靈活靈活到你可以幾乎定制它的每一個方面。
      
      如果你學(xué)習(xí) OO,MVC,設(shè)計模式。。。,而又想看看實際例子,那么swing正是你要的。  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 09:38 hhh

    其實我覺得現(xiàn)在swing模擬windows的視感(lookandfeel)已近很接近了.
      這里有swing的各種開源的lookandfeel,有些還是不錯的.
      http://www.open-open.com/61.htm
      
      還有swing本身架構(gòu)沒有說swing的外觀應(yīng)該是什么樣子的.所以以sun為swing實現(xiàn)的那個默認(rèn)的lookandfeel來批評swing的樣子丑陋是不對的.
      
      swing的組件都是四兩撥千斤,模型和繪圖都是分離的,如
      JTable 就有TableModel ---->JTable<-----TableUI,從結(jié)構(gòu)來說JTable完全扮演著控制器的角色.從API的使用者角度來說它是一個MVC體系的外觀,讓人想起了設(shè)計模式中的外觀模式.   回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 10:48 不一樣

    不是不想用swing呀,只是它速度太慢,外觀太丑。而SWT相反。  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 10:58 hhh

    to 不一樣

    難道你覺得netbeans,Jbuilder,IntelliJ IDEA,永中office...這些都很丑,都特別慢。
    且還是有很多 http://www.open-open.com/61.htm 優(yōu)秀的lookandfeel.

    再次強(qiáng)調(diào)
    swing本身架構(gòu)沒有說swing的外觀應(yīng)該是什么樣子的.所以以sun為swing實現(xiàn)的那個默認(rèn)的lookandfeel來批評swing的樣子丑陋是不對的.

    在cpu越來越快的年代靈活性和重用性更吸引人!!!  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 12:20 何晏成

    我并沒有否認(rèn)Swing的重用和靈活性,但是他給我們的速度和外觀我想也應(yīng)該是有目共睹的吧。
    “在cpu越來越快的年代靈活性和重用性更吸引人”,大哥,有速度快的更漂亮的的我們?yōu)槭裁床蝗ビ媚兀慷堑靡肅PU來拖著一個沉重的包袱呢?
    當(dāng)然,作為軟件開發(fā)者來說,我們也希望swing在這些方面能取得更大的進(jìn)步。用一個優(yōu)秀的包何嘗不是一件好事呢?  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 12:56 SeamanWang

    其實各有有缺點吧,我想這個問題主要應(yīng)該看你需要用在什么樣的應(yīng)用環(huán)境。
      回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 14:16 hhh

    但是他給我們的速度和外觀我想也應(yīng)該是有目共睹的吧。
    ————————————————————————————
    我不知道你用的是jdk那個版本,5.0及以上swing的速度應(yīng)該還是不賴的,再加上硬件環(huán)境也比以前好多了,速度差距很不明顯了!當(dāng)這種差距變得看不見時還有何意義!!!

    至于外觀還是要我重復(fù)這句話:
    swing本身架構(gòu)沒有說swing的外觀應(yīng)該是什么樣子的.所以以sun為swing實現(xiàn)的那個默認(rèn)的lookandfeel來批評swing的樣子丑陋是不對的.

    這里再補(bǔ)充一句,jdk6.0模擬各種os平臺的外觀已經(jīng)相當(dāng)一致了(使用了一些新的方法)。

    “在cpu越來越快的年代靈活性和重用性更吸引人”,大哥,有速度快的更漂亮的的我們?yōu)槭裁床蝗ビ媚兀?
    ————————————————————————————————
    問題是我們不僅要速度快,難道靈活性和重用性就不用考慮。我們來看看OO,一個對軟件界產(chǎn)生巨大影響的東西,但它有沒有使我們的軟件速度加快呢?沒有!!!應(yīng)該說反而降低了!!! 他帶來的是靈活性和重用性,更強(qiáng)的抽象機(jī)制,更好的依賴管理。
    所以難道你不會從一個框架的架構(gòu)設(shè)計,API角度去評價一個框架。


      回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 14:26 hhh

    swing是第一個讓我有震撼的 GUI庫。

    當(dāng)你看了很多MVC,設(shè)計模式,OO的很多理論后。當(dāng)用如powerbuilder,vb,mfc,...這些東西時發(fā)現(xiàn)難以表達(dá),因為它們的設(shè)計似乎不鼓勵模型與視圖的分離.感覺他們的設(shè)計缺乏一致性!

    直到看到swing, 豁然開朗,才感覺一個真正OO的GUI庫!  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 15:51 溫柔一刀

    看了半天都是一個人的回復(fù)啊  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 16:03 hhh

    你不也回復(fù)了嗎?
    那你倒是也談?wù)劙?  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 16:20 hhh

    http://www.servasoft.com/zh/index.htm
      ____________________________________________
      這個叫TWaver的東西就是在swing基礎(chǔ)上擴(kuò)展的一套用于電信方面的GUI庫.寫的非常好,靈活而高效.上面有一個使用TWaver構(gòu)建的demo.提供了webstart,如果你機(jī)器上已近安裝了JRE(java 運(yùn)行環(huán)境),那么點那個Launch就可以運(yùn)行.
      
      國內(nèi)深入研究swing的人不多,開發(fā)TWaver的那幫家伙算NB的!



    SWING比SWT速度慢多少呢?
       http://community.csdn.net/Expert/TopicView3.asp?id=5031751
        
        我一直在想如果今天開發(fā)eclipse,那些開發(fā)者還會不會選擇再開發(fā)一個GUI庫。畢竟當(dāng)年swing的實現(xiàn)和硬件環(huán)境都不盡如人意!!!  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 18:08 amp@java

    其實SWING的GUI還是有很多問題的,雖然可以讓人看起來覺得跟其他窗口沒什么區(qū)別,但一用起來就覺得區(qū)別很大,例如在windows里,選擇了一段文字之后點右鍵,就發(fā)現(xiàn)那菜單跟其他程序不一樣,有店突兀的感覺。當(dāng)然,你可以把右鍵菜單改得跟其他windows程序一樣,但到了linux下又不同了。

    用一下NetBeans,Oracle JDeveloper,Eclipse,就會發(fā)現(xiàn)Eclipse最易用(先不管各自的功能有多強(qiáng))。SWT的好處還是很多的,java在桌面程序上的失敗其實很大部分的原因在于Swing的丑陋。



    Look & Feel 并不是表面的東西,而是用戶習(xí)慣問題,Swing似乎并沒有有效地解決這個問題。

    我覺得Sun做的產(chǎn)品沒有一個好用,呵呵,當(dāng)然,java本身除外。  回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 20:37 hhh[匿名]

    例如在windows里,選擇了一段文字之后點右鍵,就發(fā)現(xiàn)那菜單跟其他程序不一樣,有店突兀的感覺。當(dāng)然,你可以把右鍵菜單改得跟其他windows程序一樣,但到了linux下又不同了。
    ________________________________________________________
    這叫什么?!這是和應(yīng)用程序相關(guān)的吧!!!!!!!!!!!!!!
    我的應(yīng)用程序在某個情況下右擊應(yīng)該彈出些什么,這是有應(yīng)用程序決定的。為什么怪到類庫呢!?
    那swt為此作了些什么呢?!

    用一下NetBeans,Oracle JDeveloper,Eclipse,就會發(fā)現(xiàn)Eclipse最易用(先不管各自的功能有多強(qiáng))。SWT的好處還是很多的,java在桌面程序上的失敗其實很大部分的原因在于Swing的丑陋。
    ——————————————————————————————————————
    實際上這個也和應(yīng)用程序設(shè)計有關(guān),你也可以用swing做出 eclipse一樣的風(fēng)格!

     http://www.swingui.com/index.html swingUI

     http://eos.sourceforge.net/ eclipse on swing

      回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 20:53 hhh[匿名]

    其實swing的目標(biāo)就是建立一個獨立的GUI系統(tǒng)(獨立于OS),所以GUI的繪制都是自己實現(xiàn)(建立在java 2D上)。這樣帶來的好處就是可以拋開歷史包袱,從頭開始實現(xiàn)一個靈活,現(xiàn)代,面向?qū)ο螅嬲缙脚_的 GUI框架。

    當(dāng)初swing設(shè)計思想是卓越的,Swing有著無與倫比的擴(kuò)展性和靈活性,它采用了很多現(xiàn)代的UI理論,如renderer/editor等。只是礙于實現(xiàn)性能。

    但隨著swing實現(xiàn)的性能越來越高,硬件環(huán)境越來越好。swing的發(fā)展一定更好!

      回復(fù)  更多評論   

    # re: 初次感受SWT 2006-11-09 20:57 hhh[匿名]

    要說sun對于swing的失敗,不是swing設(shè)計思想和架構(gòu)有問題。而是它們?yōu)閟wing實現(xiàn)的默認(rèn)look & feel是糟糕的!  回復(fù)  更多評論   

    # SWT人幾個特點 2006-12-28 20:59 rehte

    我總結(jié)了一下喜歡SWT的人幾個特點:
    1.對于Swing保有很深的偏見,自從Java 2時代用過一段時間Swing后,被當(dāng)時的Swing折磨透了,這時突然出現(xiàn)了SWT,于是頭也不回的進(jìn)了SWT,從此之后再也沒有回頭看過一眼Swing。
    2.SWT初學(xué)者,對于SWT了解越淺越喜歡SWT。SWT程序員有個規(guī)律,對于SWT知識了解的越淺,越喜歡SWT,了解越深,越對SWT產(chǎn)生困惑,越知道如何使用SWT的bugzilla,喜歡SWT的程度和學(xué)習(xí)SWT的時間成反比關(guān)系。
    3.他們都深信兩大謊言:所謂平臺一致性和速度快。認(rèn)為平臺一致性提升易用性,認(rèn)為SWT的速度比Swing快。
    4.保守的人傾向與喜歡SWT,不喜歡Swing的靈活性。在Google趨勢搜索的結(jié)果是喜歡SWT和Eclipse的人基本上都在西歐,尤其以德國最多。喜歡Swing和NetBeans大部分都在美洲,尤其是巴西(跳桑巴舞的地方)。
    5.以前可能都使用過MFC和WinForm或者Delphi,很難適應(yīng)Swing的框架模式。  回復(fù)  更多評論   

    # re: 初次感受SWT 2007-01-07 13:35 rehte

    Swing速度是否真的慢?我懷疑樓主的Java水平,的確Swing水平不高的人很難寫出速度快的swing程序來。這不是Swing本身的問題,往往是程序員自身水平的問題,如果你的水平很低的話,學(xué)SWT的結(jié)果還是一樣,這是和Swing和SWT的事件處理模型相關(guān)的,不懂它的人往往寫的程序很慢。
    不信走著瞧。  回復(fù)  更多評論   

    # re: 初次感受SWT 2007-10-29 19:30 wing5jface

    若是SWING速度不慢,早就應(yīng)有N多的人去用寫桌面程序的了,人要面對現(xiàn)實

      回復(fù)  更多評論   

    # re: 初次感受SWT 2008-11-03 13:25 java的初學(xué)者

    郁悶!
    我竟然在NetBeans IDE 下用SWT的插件!

    NetBeans到底是不會支持 SWT的圖形化工具,

    我學(xué)SWT 的本源是SWING 的圖形不好看,到j(luò)ava1.6 SWING應(yīng)該有很大的提升!

      回復(fù)  更多評論   

    # re: 初次感受SWT[未登錄] 2008-11-10 09:27 zz

    爭來爭去有個鳥用,喜歡用啥就用啥,到你發(fā)現(xiàn)不能滿足你的需要的時候,你就會發(fā)現(xiàn)另外一個的好,順便說一句,swing的漂亮和速度,是要程序員來實現(xiàn)的,你要實在沒能力就別用,用swt多好,還省得麻煩,能力不夠就別在這亂說  回復(fù)  更多評論   



    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产99久久亚洲综合精品| 国产午夜亚洲精品不卡免下载| 毛片免费观看的视频| 亚洲av日韩专区在线观看| 亚洲欧洲精品无码AV| 青娱分类视频精品免费2| 高潮毛片无遮挡高清免费视频| 亚洲AV成人片色在线观看| 午夜无遮挡羞羞漫画免费| 精品熟女少妇aⅴ免费久久| 亚洲综合久久久久久中文字幕| 国产精品免费看香蕉| 免费一级毛片在线播放视频| 猫咪免费人成在线网站| 亚洲av中文无码乱人伦在线播放 | 日日躁狠狠躁狠狠爱免费视频| 亚洲视频在线观看免费视频| 亚洲a无码综合a国产av中文| 亚洲AV无码乱码国产麻豆穿越| 成人免费毛片观看| 免费观看91视频| 美女扒开屁股让男人桶爽免费| 亚洲美女视频免费| 久久精品国产精品亚洲下载| 成人免费视频观看无遮挡| a级毛片免费完整视频| 亚洲精品福利网站| 精品亚洲一区二区三区在线播放| 免费无码A片一区二三区| 亚洲 日韩 色 图网站| 久久精品国产亚洲一区二区| 性做久久久久免费看| 亚洲一区二区免费视频| 国产免费网站看v片在线| 亚洲酒色1314狠狠做| 亚洲一级特黄大片无码毛片 | 久久国产亚洲观看| 亚洲国产精品成人久久蜜臀 | 成人爽A毛片免费看| 香蕉免费一区二区三区| 一区二区免费电影|