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

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

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

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

    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之類(lèi)有一些了解。我們這一節(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è)文檔的話(huà)可以通過(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ì)介紹。

    ActionJFace里面的定義是一個(gè)接口org.eclipse.jface.action.IAction。當(dāng)然實(shí)際上你寫(xiě)程序的時(shí)候必須自己來(lái)實(shí)現(xiàn)這個(gè)接口,寫(xiě)出自己的Action類(lèi)來(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)來(lái)實(shí)現(xiàn)Action。下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明Action的用法。

    Hello,Action!

    首先我們先不管用戶(hù)界面,先定義一個(gè)最簡(jiǎn)單的Action類(lèi)。

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

    r_helloaction.JPG

    16

    可能看了這個(gè)例子,你會(huì)認(rèn)為ActionContributionItem這個(gè)類(lèi)表示的就是一個(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 2005-10-14 17:42 閱讀(3539) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): 編程相關(guān)

    FeedBack:
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)
    2005-10-19 09:04 | jrkui
    謝謝!我是初學(xué)者,這些對(duì)我很有用,再次感謝!  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)
    2006-03-26 23:14 | Gray sky
    啟發(fā)很大,謝了  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)
    2006-03-28 11:19 | 小籠饅頭
    偶是菜鳥(niǎo)
    很有啟發(fā)
    感謝~  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)
    2006-09-01 17:39 | javaEveryDay
    怎么沒(méi)有4--9啊?呵呵~~~
    想要自行車(chē))  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)
    2006-09-29 10:11 | 不要問(wèn)我是誰(shuí)
    “&”符號(hào)表示該字母應(yīng)該被看作助記符(mnemonic)。也就是Hello按鈕標(biāo)簽文字“Hello”中H下面的橫線(xiàn)  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十)[未登錄](méi)
    2007-06-22 09:27 | p
    四到九呢? 這些貼子寫(xiě)得真是太好了  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲国产精品13p| 好大好深好猛好爽视频免费| 亚洲精品A在线观看| 亚洲国产成人AV在线播放| 成全视频免费高清| 伊人久久亚洲综合影院首页| 欧美日韩国产免费一区二区三区| 亚洲免费视频网址| 成人免费男女视频网站慢动作 | 亚洲AV综合色区无码一区| 免费a级毛片无码a∨免费软件| 亚洲香蕉网久久综合影视| 在线观看免费播放av片| 亚洲成年轻人电影网站www| 日本免费一区二区三区四区五六区| 亚洲黄色免费网站| 免费看国产精品3a黄的视频| 最新国产精品亚洲| jizzjizz亚洲| 国产精品视频全国免费观看| 亚洲国产精品一区二区久久hs| 在线观看免费av网站| 亚洲av成人一区二区三区| 午夜免费福利网站| 一级特黄aaa大片免费看| 亚洲精品一品区二品区三品区| 99热在线免费观看| 亚洲人成网站999久久久综合| 五月天婷亚洲天综合网精品偷| 久久免费国产精品| 亚洲精品福利你懂| 久久国产成人亚洲精品影院 | 一级成人毛片免费观看| 亚洲成a人片在线观看日本 | 日本免费一本天堂在线| 一级一级一片免费高清| 精品亚洲A∨无码一区二区三区| 四虎成人免费观看在线网址| 中文字幕成人免费高清在线视频 | 免费国产成人α片| 亚洲成av人片在线天堂无|