我的JAVA窩! - BlogJava

          SWT/JFace開發入門指南(十)〈轉帖〉

          JFace中的事件模式

          大家好,因為工作的事情搞了一個多月,現在終于暫時安定下來了。這一系列的文章我也會繼續往下寫。

          在這一節中,我會向大家介紹 JFace 中的事件模式。其實我相信這篇文章的讀者應該大部分都會接觸 eclipse ,這樣可能也會接觸過 eclipse 的插件開發。就是沒有接觸過,大家也可能會有在 eclipse 里面新建工程的時候出于各種原因(比如好奇心)點了 plug-in project 的時候吧。其實作為一個程序員來講,保持好奇是很重要的。如果你大概看過一個 plug-in project 的結構,雖然可能不能全部理解,但是我相信也應該對 Action 之類有一些了解。我們這一節主要就是圍繞 Action 來寫的。為了增加可讀性,我們首先介紹幾個名詞,這些名詞都可以從 eclipse 的文檔中找到。

          什么是 Action

          JFace 中的一個 Action 可以簡單地理解成一個命令。那么它和事件有什么關系呢?比如說我點了一個菜單,那么點擊本身就是一個事件,但是這個事件的影響就是相應的命令被執行了。大家日常使用的一些軟件比如 Office 都是有菜單和工具欄的,而一個菜單項和一個工具欄可能執行的是同一個命令。比如 Word 里面要新建一個文檔的話可以通過 文件 菜單下的 新建 實現,也可以通過點擊工具欄上相應的圖標實現。這個新建地功能本身在 JFace 里面是可以使用 Action 來實現的。

          JFace 里面, Action 可以關聯到菜單,工具條,以及按鈕(也就是 Button )。當然關于如何關聯,我們會在后面向大家詳細介紹。

          Action JFace 里面的定義是一個接口 org.eclipse.jface.action.IAction 。當然實際上你寫程序的時候必須自己來實現這個接口,寫出自己的 Action 類來。

          IAction 里面最重要的方法是 run() ,它也是事件觸發以后執行的代碼。其他的方法都是一些輔助性的方法,不是我們要關注的重點。為了能夠將精力集中在我們所關注的事情上,通常我們不是實現 IAction 接口,而是通過繼承 org.eclipse.jface.action.Action 這個抽象類來實現 Action 。下面我們通過一個例子來說明 Action 的用法。

          Hello,Action!

          首先我們先不管用戶界面,先定義一個最簡單的 Action 類。

          ?1?public?class?HelloAction?extends?Action{
          ?2?????private?Shell?shell;
          ?3?????
          ?4?????public?HelloAction(Shell?shell)?{????
          ?5?????????super("&Hello",Action.AS_PUSH_BUTTON);
          ?6?????????this.shell=shell;
          ?7?????}
          ?8?
          ?9?
          10?????@Override
          11?????public?void?run()?{
          12?????????MessageDialog.openInformation(shell,?"Hello",?"Hello,Action!");
          13?????}
          14?????
          15?}
          16?


          代碼段
          1 5

          這段代碼其實應該還是很好讀懂的。帶參的構造函數帶進來一個 Shell 實例,而 run() 方法說明了這個 Action 的功能就是顯示一個對話框。第 5 行中的代碼調用了父類的構造函數,其中第一個參數是 Action 對應的文本,前面的 & 符號表明了 H 是熱鍵,而第二個參數則是一個風格參數。如果大家繼續向后看的話,就會發現這個 Action 被附加在了一個按鈕上面,而按鈕上顯示的文本就是 Hello ,如果你定義的風格不是 AS_PUSH_BUTTON 而是 AS_RADIO_BUTTON 的話就會發現按鈕已經不是一個純粹的按鈕了,而是一個單選鈕。相應的其他風格可以參照 Javadoc。

          ?1?
          ?2?public?class?HelloJface?extends?ApplicationWindow?{??????
          ?3?????public?HelloJface(Shell?shell)?{
          ?4?????????super(shell);
          ?5?????}
          ?6???????@Override
          ?7?????protected?Control?createContents(Composite?parent)?{
          ?8???????????HelloAction?action=new?HelloAction(parent.getShell());
          ?9???????????ActionContributionItem?aci=new?ActionContributionItem(action);
          10???????????aci.fill(parent);
          11???????????return?parent;
          12????}??
          13????/**
          14?????*?@param?args
          15?????*/
          16????public?static?void?main(String[]?args)?{
          17?
          18????????HelloJface?demo?=?new?HelloJface(null);
          19????????demo.setBlockOnOpen(true);
          20????????demo.open();
          21????????Display.getCurrent().dispose();
          22?
          23????}
          24?}


          代碼段
          16

          和前面一節的代碼相比,我們只是修改了 createContents 方法。首先創建了一個 HelloAction 的實例,然后又創建了一個 ActionContributionItem 的實例,最后調用了這個實例的 fill 方法將按鈕添加到窗口中,這就是全部了。是不是很簡單呢?程序運行出來的效果如下圖:



          1 6

          可能看了這個例子,你會認為 ActionContributionItem 這個類表示的就是一個按鈕了。但是實際上并不是的,它在圖形界面上表示成什么樣子,隨著不同的 fill 調用又有不同。在下一節中,我會向大家深入介紹 Contribution Item 以及 JFace 中的菜單,工具條等的應用。這一節就到這里結束了,因為剛剛換了工作環境,有很多事情需要去做,所以寫得比較短,請大家見諒:)。

          posted @ 2006-12-18 00:25 J2S 閱讀(269) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(九)〈轉帖〉

               摘要: JFace 的 Hello,world ! 我們仍然是從一個最簡單的 Hello,world! 開始介紹 JFace 。為了更形象一些,首先把程序列...  閱讀全文

          posted @ 2006-12-18 00:24 J2S 閱讀(273) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(八)〈轉帖〉

          JFace 以及其他

          關于 JFace :一個簡單的介紹

          我們已經有了 swt ,我們用 swt 可以寫出一個完整的程序來,那么我們為什么需要 Jface 呢?

          對于這一點,本文作者(就是我了,嘿嘿)的理解是:使用 JFace 比只是單純地使用 swt 編程更加簡單,或者說:代碼量更少。畢竟,你完全可以用匯編寫一個用戶界面,但是付出的代價似乎大了一點 :P

          如果你在使用 swt 編程,那么 JFace 的知識并是必需的:你完全可以不用 JFace 就可以寫出任何你需要的功能。但是如果你使用 JFace ,你必需對 swt 有一些了解,因為 JFace 需要 swt 的各種部件構建用戶界面。

          我覺得我們可以在某種程度上這樣看 JFace :它封裝了一部分 swt 的功能,所謂“封裝”可以從幾個方面來看:

          首先,你可以使用 JFace 的某些機制來代替 swt 中的一些機制

          其次, JFace 中各種功能的實現都是依賴于底層的 swt 的。

          最后,你可以在使用 JFace 時候同時使用 swt

          這篇文章的組織結構

          在這篇文章以后的部分,我將會向大家介紹以下的內容:

          首先,我會從一個簡單的示例程序開始展示如何開始寫一個 JFace 程序

          之后我會向大家介紹 JFace 的事件模型(與 swt 的事件模型不同)

          然后我會向大家介紹與構建 JFace 用戶界面相關的一些知識。

          目前來講,因為我剛剛寫到這里,這是我所能想到的一些部分,當然,可能在以后的文章中略有不同。

          另外的參考資料

          在這一系列文章的第一節( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx )中,我向大家介紹了一些參考資料。現在向大家再介紹一篇在 IBM developerworks 上發現的一篇很好的文章:

          eclipse Workbench 之外使用 eclipse GUI ,這篇文章共有三部分,地址列在下面:

          http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui1/index.html

          http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui2/index.html

          http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui3/index.html

          環境的配置

          關于如何配置編程環境,可以參照這一系列文章的第一篇( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx ),在這里我不再贅述。

          posted @ 2006-12-18 00:23 J2S 閱讀(172) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(七)〈轉帖〉

               摘要: 幾種特殊的部件 好像因為大家的抱怨比較多,感覺這一段 csdn 的 blog 似乎又有恢復穩定的跡象了, ^_^ 。 ...  閱讀全文

          posted @ 2006-12-18 00:22 J2S 閱讀(246) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(六)〈轉帖〉

          使用 Layout 管理 UI 布局

          我們在前面在一些例子中已經使用過 Layout 了。那么 Layout 到底是做什么的呢?

          我們知道,在設計用戶界面時候,我們可以采用的一種辦法是手動的為每個部件設置合適當大小和位置。但是這樣的話,如果你所要顯示的部件比較多,編程量就會非常大,特別是考慮到窗體大小變化時候各種部件的重繪。而實際上,我們可以利用一些通用的規則或者說算法來安排這些部件的排列。比如下圖所示的這個窗體:

          10

          很顯然,對于這些規則化的部件排列,應該有一些更簡單的辦法,而不是在代碼的各個部分寫 xxx.setBounds 之類。 swt 給我們提供了這樣的辦法,就是使用 Layout

          你可以把一個 Layout 看成是安排部件位置和大小的一個規則,在應用了 Layout Composite (我們在這里第一次提到了 Composite Composite 就是一個能夠包含其他控件的容器,比如 Shell 就是一個 Composite ,我們會在后面的部分詳細介紹 Composite )中,所有的子控件都會按照這個規則來進行排列。

          在目前(寫這篇文章的時候 eclipse 最新版本是 3.1M7 ), org.eclipse.swt.layout 包中包含四種已經定義好的 Layout ,它們分別是: FillLayout FormLayou GridLayout RowLayout 。我在這里不再一一作介紹,而是推薦大家看一下這篇文章《 Understanding Layouts in SWT 》。相信如果你有興趣看完它的話,就會對 Layout 有比較深的了解。

          posted @ 2006-12-18 00:22 J2S 閱讀(164) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(五)〈轉帖〉

          使用 Visual Editor 加速你的開發

          eclipse 中,你可以使用 Visual Editor 來進行拖放式的圖形界面設計。實際上我覺得在這一方面大家應該可以很容易上手。

          如果你安裝了 VE 的話,在新建一個 swt 工程的時候你就可以省好多力氣了:你不需要找那些名字 n 長的 jar ,然后一個一個導入工程的 build path 里面,而是僅僅需要添加一個 User Library ,就像下面圖示一樣:

          7

          你可以新建一個 Visual Class

          圖8

          之后就可以使用 VE 進行可視化的編輯了:

          9

          關于 VE 的具體應用,我在這里不作具體介紹(說實話,我覺得用起來還是比較簡單的),如果你覺得實在有必要看一篇詳細的指南的話,可以參照這篇文章: Extending The Visual Editor
          Tutorial: Enabling support for a custom widget


          posted @ 2006-12-18 00:21 J2S 閱讀(142) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(四)〈轉帖〉

               摘要: 讓你的 swt 程序動起來 在向使用者提供最差的用戶體驗方面,中國的 IT 企業始終走在時代的最前端。之所以有這樣的感慨其實是來源于往 blog 上貼...  閱讀全文

          posted @ 2006-12-18 00:21 J2S 閱讀(158) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(一)〈轉帖〉

               摘要: 寫在前面的話 終于決定提起筆來寫一篇關于 swt 和 JFace 編程的文章。在開始之前,我想先介紹一下你能夠從將要出現的這一系列文章里得到什么,以及更重要的,你不能得到什么。我們的時間是如此之重要,以至于我們很難容忍...  閱讀全文

          posted @ 2006-12-18 00:19 J2S 閱讀(124) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(三)〈轉帖〉

               摘要: 初步體驗 widget ? ...  閱讀全文

          posted @ 2006-12-08 19:30 J2S 閱讀(251) | 評論 (0)編輯 收藏

          SWT/JFace開發入門指南(二)〈轉帖〉

               摘要: 從 Hello, world! 開始了解 Display 和 Shell 在這一節中,我們從前面所列舉出來的...  閱讀全文

          posted @ 2006-12-08 18:13 J2S 閱讀(271) | 評論 (0)編輯 收藏

          僅列出標題
          共3頁: 上一頁 1 2 3 下一頁 
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 饶阳县| 宁阳县| 麻城市| 汉阴县| 南乐县| 和静县| 蒙自县| 大荔县| 岑溪市| 大竹县| 保山市| 普兰县| 高州市| 龙南县| 平阴县| 宕昌县| 上栗县| 贡嘎县| 辽中县| 徐闻县| 鲜城| 松溪县| 黄陵县| 和静县| 林甸县| 稻城县| 紫云| 高邑县| 钟山县| 东兴市| 绥江县| 成都市| 科技| 白水县| 西乌珠穆沁旗| 天水市| 六盘水市| 疏勒县| 苍溪县| 凤阳县| 西城区|