一個ActionDelegate代理多個Action
以前在做Eclipse插件的時候,習(xí)慣一個功能定義一個操作項。比如說在org.eclipse.ui.popupMenus擴展點上,如果有添加這個功能,但是添加的類型有多樣,我們假定現(xiàn)在有添加A、B、C、D四個元素,在擴展點上添加一個viewerContribution擴展,添加四個Action,分別為A、B、C、D。因為這四個添加功能非常相近,所以我們可以只寫一個ActionDelegate,把這四個Action的代理類都指向同一個。但是ID必須區(qū)分。聲明定義如下:























上面的主要區(qū)別是在id,在所有的代理ActionDelegate中的run(IAction action)方法中都帶有一個參數(shù)action,這個參數(shù)有個用途就是可以在運行時區(qū)別是對應(yīng)的那個action。下面我們看一下AddTestDelegate類的定義:
1
package test;
2
3
import org.eclipse.jface.action.IAction;
4
import org.eclipse.jface.viewers.ISelection;
5
import org.eclipse.ui.IViewActionDelegate;
6
import org.eclipse.ui.IViewPart;
7
8
public class AddTestDelegate implements IViewActionDelegate {
9
10
private IViewPart view;
11
public AddTestDelegate() {
12
// TODO 自動生成構(gòu)造函數(shù)存根
13
}
14
15
public void init(IViewPart view) {
16
this.view = view;
17
18
}
19
20
public void run(IAction action) {
21
String id = action.getId();
22
23
if(id.equals("add.a")){
24
//TODO
25
}else if(id.equals("add.b")){
26
//TODO
27
}else if(id.equals("add.c")){
28
//TODO
29
}else if(id.equals("add.d")){
30
//TODO
31
}
32
33
}
34
35
public void selectionChanged(IAction action, ISelection selection) {
36
// TODO 自動生成方法存根
37
38
}
39
40
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

我們可以在運行時通過action.getId()在識別是對應(yīng)的那個Action。
總結(jié):這個途徑可以為插件開發(fā)中避免寫過多的ActionDelegate,把一些功能較為接近實現(xiàn)代碼又比較少的操作合并在一起。當(dāng)然,對于操作步驟比較多的,為了代碼維護的方便,還是建議單獨為它定義一個代理。
posted on 2007-10-31 08:59 liaojiyong 閱讀(896) 評論(0) 編輯 收藏 所屬分類: Eclipse