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