gr8vyguy@Blogjava

          SWT學習雜記

          推薦書籍

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

          網絡資源

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

          術語表(Glossary)

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

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

          Erich Gamma: 我們曾經用Swing/AWT開發過一個IDE,VisualAge/MicroEdition。 完成后,我們的感覺很好,但是早期的用戶感覺并不好,他們抱怨的主要一個是性能問題,另外一個是程序一些與Windows不相符的特性(non-native)。一部分性能問題是我們的錯誤,一部分要歸咎于Swing。通過我們的努力和其他一些方法,我們相信性能問題可以不斷改善。讓我們擔憂的是Non-Native的特性。Swing是用模擬的方法實現的,Non-Native是Swing的天性。要解決Non-Native的問題,我們只能放棄Swing。正是這個原因,我們開發了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

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

          SWT的Platform Interface Layer :  比如Windows上調用Win API的Java原生代碼

          User interface thread : 處理GUI的Thread

          測試

          在每個支持的平臺上都要測試SWT寫的程序,實際上Swing的程序也一樣需要測試,除非你的Swing程序在所有的平臺上都使用同一個Look&Feel.

          custom widgets package 基于原生的SWT部件

          API Package和非API Package(internal)

          Label也可以有快捷鍵(Mnemonic)

          以前只知道菜單可以有快捷鍵 , 通過 &File 指定 F File 菜單的快捷鍵。原來 Label 也是可以有快捷鍵的,用同樣的方法指定。當用戶按 Alt+ 快捷鍵時, Label 的下一個控件將獲得輸入焦點。下一個控件一般是指子控件列表里位于 Label 后面的那個控件。如果 Label 是子控件列表里的最后一個,那么 SWT 會調用一個系統的算法尋找下一個控件 . star

          Radio Buttons

          當Radio Buttons在SWT.NO_RADIO_GROUP的容器中時,Radio Buttons的行為就類似Check Buttons. 但是是Radio Buttons的樣子, 所以要謹慎用SWT.NO_RADIO_GROUP.  如果Radio Buttons或者Radio Menus在RADIO_GROUP的容器中時, 選擇一個Button,原來被選的Button會變成不被選中, 這時會有兩個SWT.Selection的事件分別被發送到這兩個Button。Radio Menus完全和Radio Button類似。一個典型的Radio Buttons的Listener

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

              }
          };

          Text

          SWT指定范圍的方式和Java的習慣不一樣, Text.getText(int start, int end)包括index為end的字符, 而String.substring(int start, int end)不包括index為end的字符。這個挺糟糕的。可惜按SWT Team的說法他們發現這個錯誤太晚了,可能是因為SWT Team的人都是Smalltalk的背景吧。

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

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

          Decorations(不是Decoration)

          是窗口內的一個窗口,可以改變大小,移動。

          decorations.jpg


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

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

          CoolBar
          可以包含其他控件,可以移動

          Sash 是一個可以被拽動的分隔控件. 使用Sash的Selection事件改變控件位置和

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

          評論

          # re: SWT學習雜記 2007-03-03 11:51 催月淚

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

          # re: SWT學習雜記 2007-03-14 22:56 喜來樂哈哈

          @催月淚
          不是的, SWT中Control是指需要操作系統資源的Widget,容器是Composite類, Widget是所有SWT對象的父類。  回復  更多評論   

          # re: SWT學習雜記 2007-03-17 06:32 BeanSoft

          介紹的很不錯. 發現 TabItem 無法動態顯示/隱藏, 有點頭大....也許有別的辦法實現吧.  回復  更多評論   

          # re: SWT學習雜記 2007-03-17 12:03 喜來樂哈哈

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

          # re: SWT學習雜記 2007-03-23 02:53 BeanSoft

          是呀, 很是納悶沒有提供 setVisible 的方法. 按說 item 也是組件, 為啥就不能被隱藏呢?  回復  更多評論   

          # re: SWT學習雜記 2007-03-23 02:59 喜來樂哈哈

          @BeanSoft
          是因為Item是從Widget繼承的,而不是從Control繼承的。
            回復  更多評論   

          # re: SWT學習雜記 2007-08-21 03:13 CloudiDust

          "在操作系統領域Windows是越來越強,Suse被收購,Redhat被捐獻,蘋果電腦改稱蘋果,種種跡象都表明,未來桌面軟件是否成功,主要取決于Windows系統下的用戶的體驗。"

          這是偏頗的說法~~~

          Suse被收購是因為Novell看到了Linux的巨大潛力,事實上suse也發展得非常好.

          RedHat也沒有被捐獻,只是分為了社區項目Fedora和企業項目RHEL,目前仍然是Linux發行版的一把手,似乎也準備回到桌面領域.

          更不要說上升強勁的Ubuntu了~~~~~

          以及其他發行版~~~~~

            回復  更多評論   

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

          導航

          統計

          公告

        1. 轉載請注明出處.
        2. msn: gr8vyguy at live.com
        3. 常用鏈接

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 阿合奇县| 剑河县| 昆山市| 宜兰县| 峨边| 长治市| 甘泉县| 龙川县| 三江| 安吉县| 奉新县| 平塘县| 错那县| 皮山县| 静海县| 平顺县| 北海市| 雷波县| 桂平市| 新余市| 嘉兴市| SHOW| 观塘区| 普格县| 晋江市| 怀仁县| 中卫市| 万安县| 顺义区| 罗山县| 虹口区| 四会市| 忻州市| 古蔺县| 连山| 金坛市| 禹城市| 始兴县| 札达县| 湟源县| 吐鲁番市|