<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中的事件模式

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

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

    什么是Action

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

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

    ActionJFace里面的定義是一個接口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 


    代碼段
    15

    這段代碼其實應該還是很好讀懂的。帶參的構造函數帶進來一個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方法將按鈕添加到窗口中,這就是全部了。是不是很簡單呢?程序運行出來的效果如下圖:

    r_helloaction.JPG

    16

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

     

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

    FeedBack:
    # re: SWT/Jface開發入門指南(十)
    2005-10-19 09:04 | jrkui
    謝謝!我是初學者,這些對我很有用,再次感謝!  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十)
    2006-03-26 23:14 | Gray sky
    啟發很大,謝了  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十)
    2006-03-28 11:19 | 小籠饅頭
    偶是菜鳥
    很有啟發
    感謝~  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十)
    2006-09-01 17:39 | javaEveryDay
    怎么沒有4--9啊?呵呵~~~
    想要自行車)  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十)
    2006-09-29 10:11 | 不要問我是誰
    “&”符號表示該字母應該被看作助記符(mnemonic)。也就是Hello按鈕標簽文字“Hello”中H下面的橫線  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十)[未登錄]
    2007-06-22 09:27 | p
    四到九呢? 這些貼子寫得真是太好了  回復  更多評論
      
    主站蜘蛛池模板: 特级毛片aaaa免费观看| 国产亚洲美女精品久久久久| 成人免费视频试看120秒| 亚洲av中文无码乱人伦在线观看| 亚洲片国产一区一级在线观看| a级精品九九九大片免费看| 77777_亚洲午夜久久多人 | 国产亚洲精久久久久久无码AV| 久久免费观看国产99精品| 亚洲一区中文字幕| 久久久久亚洲精品无码网址| 最近中文字幕高清免费中文字幕mv | 东北美女野外bbwbbw免费 | 日本人成在线视频免费播放| 最新亚洲精品国偷自产在线| 亚洲区小说区图片区| 男女免费观看在线爽爽爽视频 | 日韩免费高清视频| 男人都懂www深夜免费网站| tom影院亚洲国产一区二区| 亚洲熟妇丰满多毛XXXX| 免费一本色道久久一区| 中文无码日韩欧免费视频| 亚洲一区二区三区在线观看网站| 国产亚洲美女精品久久久2020| 亚洲精品动漫免费二区| 永久免费av无码网站yy| 国产天堂亚洲国产碰碰| 亚洲va乱码一区二区三区| 日本亚洲成高清一区二区三区| 国产成人免费a在线视频app| 24小时日本韩国高清免费| 国产裸体美女永久免费无遮挡 | 深夜A级毛片视频免费| 亚洲人成综合在线播放| 亚洲av无码av制服另类专区| 亚洲av无码天堂一区二区三区| 免费国产作爱视频网站| 十八禁无码免费网站| 国产免费福利体检区久久| 天天综合亚洲色在线精品|