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

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

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

    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 閱讀(2503) 評論(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

    導航

    統計

    公告

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

    留言簿(9)

    隨筆分類(68)

    隨筆檔案(80)

    文章分類(1)

    My Open Source Projects

    搜索

    積分與排名

    最新評論

    主站蜘蛛池模板: 久久免费的精品国产V∧| 99久久99这里只有免费费精品| 亚洲高清国产拍精品26U| 91av视频免费在线观看| 亚洲欧美日韩中文无线码| 久久99亚洲综合精品首页| 免费91最新地址永久入口| 亚洲а∨天堂久久精品9966| 亚洲精品国产电影| 日本免费xxxx| 成人精品综合免费视频| 亚洲精品熟女国产| 四虎免费久久影院| 114级毛片免费观看| 国产99久久亚洲综合精品| 亚洲伊人tv综合网色| 全部免费毛片在线| 免费看片在线观看| 中文在线免费不卡视频| 亚洲熟妇无码AV| 亚洲成AV人片在线观看WWW| 国产成人在线免费观看| 99免费视频观看| 一个人看的hd免费视频| 中文字幕在线观看亚洲日韩| 亚洲AV无码第一区二区三区| 全免费一级毛片在线播放| 99久久精品免费视频| yellow视频免费看| 亚洲欧美中文日韩视频| 亚洲一区二区电影| 国产午夜亚洲精品午夜鲁丝片| 四虎www免费人成| 中文毛片无遮挡高潮免费| 99久久免费国产特黄| 香港经典a毛片免费观看看| 亚洲一区无码中文字幕乱码| 亚洲AV中文无码字幕色三| 中文字幕中韩乱码亚洲大片| 免费观看大片毛片| 久久久www成人免费毛片|