我的JAVA窩! - BlogJava

          SWT/JFace開(kāi)發(fā)入門(mén)指南(十)〈轉(zhuǎn)帖〉

          JFace中的事件模式

          大家好,因?yàn)楣ぷ鞯氖虑楦懔艘粋€(gè)多月,現(xiàn)在終于暫時(shí)安定下來(lái)了。這一系列的文章我也會(huì)繼續(xù)往下寫(xiě)。

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

          什么是 Action

          JFace 中的一個(gè) Action 可以簡(jiǎn)單地理解成一個(gè)命令。那么它和事件有什么關(guān)系呢?比如說(shuō)我點(diǎn)了一個(gè)菜單,那么點(diǎn)擊本身就是一個(gè)事件,但是這個(gè)事件的影響就是相應(yīng)的命令被執(zhí)行了。大家日常使用的一些軟件比如 Office 都是有菜單和工具欄的,而一個(gè)菜單項(xiàng)和一個(gè)工具欄可能執(zhí)行的是同一個(gè)命令。比如 Word 里面要新建一個(gè)文檔的話可以通過(guò) 文件 菜單下的 新建 實(shí)現(xiàn),也可以通過(guò)點(diǎn)擊工具欄上相應(yīng)的圖標(biāo)實(shí)現(xiàn)。這個(gè)新建地功能本身在 JFace 里面是可以使用 Action 來(lái)實(shí)現(xiàn)的。

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

          Action JFace 里面的定義是一個(gè)接口 org.eclipse.jface.action.IAction 。當(dāng)然實(shí)際上你寫(xiě)程序的時(shí)候必須自己來(lái)實(shí)現(xiàn)這個(gè)接口,寫(xiě)出自己的 Action 類來(lái)。

          IAction 里面最重要的方法是 run() ,它也是事件觸發(fā)以后執(zhí)行的代碼。其他的方法都是一些輔助性的方法,不是我們要關(guān)注的重點(diǎn)。為了能夠?qū)⒕性谖覀兯P(guān)注的事情上,通常我們不是實(shí)現(xiàn) IAction 接口,而是通過(guò)繼承 org.eclipse.jface.action.Action 這個(gè)抽象類來(lái)實(shí)現(xiàn) Action 。下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明 Action 的用法。

          Hello,Action!

          首先我們先不管用戶界面,先定義一個(gè)最簡(jiǎn)單的 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

          這段代碼其實(shí)應(yīng)該還是很好讀懂的。帶參的構(gòu)造函數(shù)帶進(jìn)來(lái)一個(gè) Shell 實(shí)例,而 run() 方法說(shuō)明了這個(gè) Action 的功能就是顯示一個(gè)對(duì)話框。第 5 行中的代碼調(diào)用了父類的構(gòu)造函數(shù),其中第一個(gè)參數(shù)是 Action 對(duì)應(yīng)的文本,前面的 & 符號(hào)表明了 H 是熱鍵,而第二個(gè)參數(shù)則是一個(gè)風(fēng)格參數(shù)。如果大家繼續(xù)向后看的話,就會(huì)發(fā)現(xiàn)這個(gè) Action 被附加在了一個(gè)按鈕上面,而按鈕上顯示的文本就是 Hello ,如果你定義的風(fēng)格不是 AS_PUSH_BUTTON 而是 AS_RADIO_BUTTON 的話就會(huì)發(fā)現(xiàn)按鈕已經(jīng)不是一個(gè)純粹的按鈕了,而是一個(gè)單選鈕。相應(yīng)的其他風(fēng)格可以參照 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

          和前面一節(jié)的代碼相比,我們只是修改了 createContents 方法。首先創(chuàng)建了一個(gè) HelloAction 的實(shí)例,然后又創(chuàng)建了一個(gè) ActionContributionItem 的實(shí)例,最后調(diào)用了這個(gè)實(shí)例的 fill 方法將按鈕添加到窗口中,這就是全部了。是不是很簡(jiǎn)單呢?程序運(yùn)行出來(lái)的效果如下圖:



          1 6

          可能看了這個(gè)例子,你會(huì)認(rèn)為 ActionContributionItem 這個(gè)類表示的就是一個(gè)按鈕了。但是實(shí)際上并不是的,它在圖形界面上表示成什么樣子,隨著不同的 fill 調(diào)用又有不同。在下一節(jié)中,我會(huì)向大家深入介紹 Contribution Item 以及 JFace 中的菜單,工具條等的應(yīng)用。這一節(jié)就到這里結(jié)束了,因?yàn)閯倓倱Q了工作環(huán)境,有很多事情需要去做,所以寫(xiě)得比較短,請(qǐng)大家見(jiàn)諒:)。

          posted on 2006-12-18 00:25 J2S 閱讀(272) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 花垣县| 佛山市| 荥阳市| 蕉岭县| 嘉祥县| 江口县| 辽中县| 南阳市| 马龙县| 庆阳市| 小金县| 陕西省| 奉新县| 广安市| 仁化县| 库伦旗| 乌拉特前旗| 苍南县| 娄烦县| 临武县| 衡南县| 怀柔区| 越西县| 漳平市| 甘德县| 淮北市| 隆尧县| 南溪县| 延边| 泗阳县| 沐川县| 吉木萨尔县| 江山市| 黑水县| 麻江县| 凤凰县| 秭归县| 天峨县| 潼南县| 公安县| 卢湾区|