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

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

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

    The Spark of Thinking

    Focus on Eclipse Tools.

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評論 :: 0 Trackbacks

    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 中的菜單,工具條等的應用。這一節就到這里結束了,因為剛剛換了工作環境,有很多事情需要去做,所以寫得比較短,請大家見諒:)。

    ?



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=505209

    posted on 2006-07-20 18:13 The Spark of Thinking 閱讀(239) 評論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 黄色网页免费观看| 亚洲一区精彩视频| 一区二区三区免费视频播放器| 波多野结衣久久高清免费| 亚洲国产综合精品中文第一| 成人在线免费看片| 亚洲天堂2016| 女人18特级一级毛片免费视频| 亚洲乱码在线观看| 在线精品免费视频无码的| 亚洲AV永久无码精品一福利| 精品国产免费观看一区| 国产精品亚洲专区一区| 亚洲一级片免费看| 国产在线观看免费av站| 久久久久亚洲精品无码蜜桃| 亚洲黄色免费在线观看| 亚洲人成网站在线在线观看| 日韩中文无码有码免费视频| 日韩免费码中文在线观看| 久久久久国产亚洲AV麻豆| 久久久久国产精品免费免费不卡| 亚洲视频2020| 一二三四在线播放免费观看中文版视频 | 久久精品国产亚洲av天美18 | 国产做国产爱免费视频| 亚洲成AV人片在线播放无码| 在线美女免费观看网站h| 亚洲午夜久久久久久尤物| 色视频色露露永久免费观看| v片免费在线观看| 亚洲av丰满熟妇在线播放| 日本精品人妻无码免费大全 | 亚洲精品国产电影| 无码av免费一区二区三区| 亚洲精品第一综合99久久| 国产日产亚洲系列最新| 国产成人精品免费视频大全麻豆| 亚洲国产aⅴ成人精品无吗| 亚洲精品无码成人片久久| 国国内清清草原免费视频99|