幻境
          We are extremely fortunate not to know precisely the kind of world we live in
          posts - 22,comments - 39,trackbacks - 0

          JFace中的事件模式

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

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

          什么是Action

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

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

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

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


          代碼段
          15

          這段代碼其實(shí)應(yīng)該還是很好讀懂的。帶參的構(gòu)造函數(shù)帶進(jìn)來一個Shell實(shí)例,而run()方法說明了這個Action的功能就是顯示一個對話框。第5行中的代碼調(diào)用了父類的構(gòu)造函數(shù),其中第一個參數(shù)是Action對應(yīng)的文本,前面的&符號表明了H是熱鍵,而第二個參數(shù)則是一個風(fēng)格參數(shù)。如果大家繼續(xù)向后看的話,就會發(fā)現(xiàn)這個Action被附加在了一個按鈕上面,而按鈕上顯示的文本就是Hello,如果你定義的風(fēng)格不是AS_PUSH_BUTTON而是AS_RADIO_BUTTON的話就會發(fā)現(xiàn)按鈕已經(jīng)不是一個純粹的按鈕了,而是一個單選鈕。相應(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)建了一個HelloAction的實(shí)例,然后又創(chuàng)建了一個ActionContributionItem的實(shí)例,最后調(diào)用了這個實(shí)例的fill方法將按鈕添加到窗口中,這就是全部了。是不是很簡單呢?程序運(yùn)行出來的效果如下圖:

          r_helloaction.JPG

          16

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

           

          posted on 2005-10-14 17:42 閱讀(3550) 評論(6)  編輯  收藏 所屬分類: 編程相關(guān)

          FeedBack:
          # re: SWT/Jface開發(fā)入門指南(十)
          2005-10-19 09:04 | jrkui
          謝謝!我是初學(xué)者,這些對我很有用,再次感謝!  回復(fù)  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十)
          2006-03-26 23:14 | Gray sky
          啟發(fā)很大,謝了  回復(fù)  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十)
          2006-03-28 11:19 | 小籠饅頭
          偶是菜鳥
          很有啟發(fā)
          感謝~  回復(fù)  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十)
          2006-09-01 17:39 | javaEveryDay
          怎么沒有4--9啊?呵呵~~~
          想要自行車)  回復(fù)  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十)
          2006-09-29 10:11 | 不要問我是誰
          “&”符號表示該字母應(yīng)該被看作助記符(mnemonic)。也就是Hello按鈕標(biāo)簽文字“Hello”中H下面的橫線  回復(fù)  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十)[未登錄]
          2007-06-22 09:27 | p
          四到九呢? 這些貼子寫得真是太好了  回復(fù)  更多評論
            
          主站蜘蛛池模板: 班玛县| 景宁| 阿克| 商丘市| 略阳县| 江永县| 五峰| 保靖县| 东乡| 苏尼特左旗| 芷江| 桃园县| 宁海县| 大余县| 宣恩县| 玉林市| 天峨县| 仁化县| 宜章县| 普宁市| 宁阳县| 赣州市| 无极县| 安新县| 开江县| 全椒县| 兴隆县| 崇阳县| 清苑县| 汉阴县| 惠来县| 天祝| 全南县| 北碚区| 玉溪市| 吕梁市| 谢通门县| 页游| 普宁市| 桃江县| 盐边县|