gr8vyguy@Blogjava

          SWT學(xué)習(xí)雜記

          推薦書(shū)籍

          SWT: The Standard Widget Toolkit  - Steve Northover,  Mike Wilson
          The Definitive Guide to SWT and JFace  - Robert Harris, Rob Warner

          網(wǎng)絡(luò)資源

          http://www.eclipse.org/swt/
          SWT新聞組
          Getting Started with Eclipse and the SWT
          SWT Javadoc

          術(shù)語(yǔ)表(Glossary)

          native   ----   原生
          widget  ----   部件

          SWT是一套高效,跨平臺(tái)的原生窗口部件庫(kù),使得Java程序能夠使用操作系統(tǒng)提供的原生用戶界面,支持大部分操作系統(tǒng),具體的請(qǐng)看這里

          Erich Gamma: 我們?cè)?jīng)用Swing/AWT開(kāi)發(fā)過(guò)一個(gè)IDE,VisualAge/MicroEdition。 完成后,我們的感覺(jué)很好,但是早期的用戶感覺(jué)并不好,他們抱怨的主要一個(gè)是性能問(wèn)題,另外一個(gè)是程序一些與Windows不相符的特性(non-native)。一部分性能問(wèn)題是我們的錯(cuò)誤,一部分要?dú)w咎于Swing。通過(guò)我們的努力和其他一些方法,我們相信性能問(wèn)題可以不斷改善。讓我們擔(dān)憂的是Non-Native的特性。Swing是用模擬的方法實(shí)現(xiàn)的,Non-Native是Swing的天性。要解決Non-Native的問(wèn)題,我們只能放棄Swing。正是這個(gè)原因,我們開(kāi)發(fā)了SWT。

          比較SWT和Swing

          www.hacknot.info/hacknot/action/showEntry?eid=74 
          www-128.ibm.com/developerworks/grid/library/os-swingswt/
          Ozgur Akan's Blog
          Putting an end to the SWT/Swing nonsense
          Is SWT better than Swing?
          SWT & Swing probably both suck
          Gosling on SWT

          個(gè)人認(rèn)為,拋開(kāi)商業(yè)因素,SWT和Swing之爭(zhēng)主要是兩種方法之爭(zhēng),模擬的(emulated)和原生的(native). Swing可以稱是"絕對(duì)的模擬", 我并不是指所有Swing的代碼是Java的,實(shí)際上Swing的JFrame也是一個(gè)原生的窗口。而是Swing的社區(qū)里非常排斥原生的代碼,我覺(jué)得有點(diǎn)過(guò)了。Swing是要以一己之力,通過(guò)Plugable Look And Feel來(lái)模擬所有它所支持的平臺(tái)的界面。SWT是以原生的代碼為主,模擬為輔。SWT也正在加強(qiáng)對(duì)其中模擬代碼的Plugable Look&Feel的功能的支持。一個(gè)很多Java高手不愿承認(rèn)的事實(shí),在操作系統(tǒng)領(lǐng)域Windows是越來(lái)越強(qiáng),Suse被收購(gòu),Redhat被捐獻(xiàn),蘋果電腦改稱蘋果,種種跡象都表明,未來(lái)桌面軟件是否成功,主要取決于Windows系統(tǒng)下的用戶的體驗(yàn)。我的Java界面選擇是SWT,而不是Swing。

          SWT的Platform Interface Layer :  比如Windows上調(diào)用Win API的Java原生代碼

          User interface thread : 處理GUI的Thread

          測(cè)試

          在每個(gè)支持的平臺(tái)上都要測(cè)試SWT寫的程序,實(shí)際上Swing的程序也一樣需要測(cè)試,除非你的Swing程序在所有的平臺(tái)上都使用同一個(gè)Look&Feel.

          custom widgets package 基于原生的SWT部件

          API Package和非API Package(internal)

          Label也可以有快捷鍵(Mnemonic)

          以前只知道菜單可以有快捷鍵 , 通過(guò) &File 指定 F File 菜單的快捷鍵。原來(lái) Label 也是可以有快捷鍵的,用同樣的方法指定。當(dāng)用戶按 Alt+ 快捷鍵時(shí), Label 的下一個(gè)控件將獲得輸入焦點(diǎn)。下一個(gè)控件一般是指子控件列表里位于 Label 后面的那個(gè)控件。如果 Label 是子控件列表里的最后一個(gè),那么 SWT 會(huì)調(diào)用一個(gè)系統(tǒng)的算法尋找下一個(gè)控件 . star

          Radio Buttons

          當(dāng)Radio Buttons在SWT.NO_RADIO_GROUP的容器中時(shí),Radio Buttons的行為就類似Check Buttons. 但是是Radio Buttons的樣子, 所以要謹(jǐn)慎用SWT.NO_RADIO_GROUP.  如果Radio Buttons或者Radio Menus在RADIO_GROUP的容器中時(shí), 選擇一個(gè)Button,原來(lái)被選的Button會(huì)變成不被選中, 這時(shí)會(huì)有兩個(gè)SWT.Selection的事件分別被發(fā)送到這兩個(gè)Button。Radio Menus完全和Radio Button類似。一個(gè)典型的Radio Buttons的Listener

          Listener listener  =   new  Listener() {
              
          public   void  handleEvent(Event event) {
                  Button button 
          =  (Button) event.widget;
                  
          if  ( ! button.getSelection())  return ;
                  事件處理代碼

              }
          };

          Text

          SWT指定范圍的方式和Java的習(xí)慣不一樣, Text.getText(int start, int end)包括index為end的字符, 而String.substring(int start, int end)不包括index為end的字符。這個(gè)挺糟糕的。可惜按SWT Team的說(shuō)法他們發(fā)現(xiàn)這個(gè)錯(cuò)誤太晚了,可能是因?yàn)镾WT Team的人都是Smalltalk的背景吧。

          Text.setSelection(start, end)中start,end的值可以是0到N, N為Text的長(zhǎng)度,也就是說(shuō)提供N+1種的選擇可能性。(0,0)表示什么都不選, (0, N)表示全部選中. setSelection(start) = setSelection(start, start). 加上getText的約定,這是很容易出錯(cuò)的, 比如
          text.setText("Hello world!"), 要選中Hello這個(gè)單詞, 要用text.setSelection(0, "Hello".length()), 而不是"Hello".length()-1.

          SWT.Modify和SWT.Verify的區(qū)別: Verify事件是在字符別插入之前,而Modify是在字符被插入之后。Verify的event.doit=false將取消字符插入.

          Decorations(不是Decoration)

          是窗口內(nèi)的一個(gè)窗口,可以改變大小,移動(dòng)。

          decorations.jpg


          TabFolder
          controls是加在TabFolder上,而不是TabItem上。Item是Widget,但不是Control。

          ToolBar
          是shell的一個(gè)子控件,和Label,button沒(méi)有區(qū)別,也需要Layout來(lái)管理。
          DROP_DOWN的ToolItem只是提供了界面,下拉菜單要自個(gè)做,判斷Selection事件的event.detail==SWT.ARROW可以區(qū)分按了哪里.

          CoolBar
          可以包含其他控件,可以移動(dòng)

          Sash 是一個(gè)可以被拽動(dòng)的分隔控件. 使用Sash的Selection事件改變控件位置和

          posted on 2007-02-24 15:21 gr8vyguy 閱讀(2507) 評(píng)論(7)  編輯  收藏 所屬分類: Java

          評(píng)論

          # re: SWT學(xué)習(xí)雜記 2007-03-03 11:51 催月淚

          controls(控件)是容器可以容納部件,而widget(部件)只能建在control上,是不是這個(gè)意思?  回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-03-14 22:56 喜來(lái)樂(lè)哈哈

          @催月淚
          不是的, SWT中Control是指需要操作系統(tǒng)資源的Widget,容器是Composite類, Widget是所有SWT對(duì)象的父類。  回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-03-17 06:32 BeanSoft

          介紹的很不錯(cuò). 發(fā)現(xiàn) TabItem 無(wú)法動(dòng)態(tài)顯示/隱藏, 有點(diǎn)頭大....也許有別的辦法實(shí)現(xiàn)吧.  回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-03-17 12:03 喜來(lái)樂(lè)哈哈

          @BeanSoft
          用TabItem.dispose() 隱藏, 它并不毀壞和TabItem相關(guān)的Control。顯示的話就得重新new一個(gè)TabItem到正確的位置,再置上原先的Control。 有點(diǎn)繁瑣, 我不知道其他的法子了。可以寫成一個(gè)類封裝這個(gè)功能。  回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-03-23 02:53 BeanSoft

          是呀, 很是納悶沒(méi)有提供 setVisible 的方法. 按說(shuō) item 也是組件, 為啥就不能被隱藏呢?  回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-03-23 02:59 喜來(lái)樂(lè)哈哈

          @BeanSoft
          是因?yàn)镮tem是從Widget繼承的,而不是從Control繼承的。
            回復(fù)  更多評(píng)論   

          # re: SWT學(xué)習(xí)雜記 2007-08-21 03:13 CloudiDust

          "在操作系統(tǒng)領(lǐng)域Windows是越來(lái)越強(qiáng),Suse被收購(gòu),Redhat被捐獻(xiàn),蘋果電腦改稱蘋果,種種跡象都表明,未來(lái)桌面軟件是否成功,主要取決于Windows系統(tǒng)下的用戶的體驗(yàn)。"

          這是偏頗的說(shuō)法~~~

          Suse被收購(gòu)是因?yàn)镹ovell看到了Linux的巨大潛力,事實(shí)上suse也發(fā)展得非常好.

          RedHat也沒(méi)有被捐獻(xiàn),只是分為了社區(qū)項(xiàng)目Fedora和企業(yè)項(xiàng)目RHEL,目前仍然是Linux發(fā)行版的一把手,似乎也準(zhǔn)備回到桌面領(lǐng)域.

          更不要說(shuō)上升強(qiáng)勁的Ubuntu了~~~~~

          以及其他發(fā)行版~~~~~

            回復(fù)  更多評(píng)論   

          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          公告

        1. 轉(zhuǎn)載請(qǐng)注明出處.
        2. msn: gr8vyguy at live.com
        3. 常用鏈接

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評(píng)論

          主站蜘蛛池模板: 宣武区| 临江市| 崇阳县| 萨嘎县| 壤塘县| 辽源市| 富裕县| 明星| 云和县| 桂东县| 湘潭市| 墨江| 松桃| 渭南市| 琼结县| 恭城| 甘洛县| 罗甸县| 莱西市| 昌平区| 军事| 石河子市| 金昌市| 台前县| 清流县| 泾源县| 桐城市| 甘德县| 扶沟县| 基隆市| 图们市| 合作市| 苍南县| 晋宁县| 固阳县| 辽宁省| 江西省| 夏邑县| 襄城县| 郯城县| 昭通市|