JFace中的工具條和菜單
前一節中我們簡單介紹了一下Action。其實所謂的Action就是一個最常用的事件,舉個例子來說,對于一個按鈕來說它可以有多個事件,比如按鍵,焦點,鼠標,等等等等吧,但是實際上在使用程序的時候,我們最關心的,就是按下去這個按鈕會發生什么,這個其實就是所謂的Action。如果大家以前做過swing/awt變成的話,應該對Action不會陌生。
在JFace里面,一個Action可以對應多個GUI對象,這些對象就是所謂的Contribution Item。比如我們在一般程序里面很常見的“文件”菜單,下面都會有“新建”,“保存”等等。同時我們可以在工具條上放置相應的按鈕,那么這些都是有相同的功能,在JFace里面我們可以只寫一個Action,然后把它映射到不同的ContributionItem去,而不必為每個部件都寫一串處理事件。
我們下面還是通過一個簡單的例子來說明,在JFace中怎么使用菜單和工具條這兩種最基本也是最有用的Contribution Item。
我們這個程序寫得很傻,就是一個光禿禿的窗口上做了一個菜單和工具條按鈕,功能也只有一個,就是每次點一下,就彈出一個輸入框來問你名字是什么,然后顯示一個Hello, xxx之類的。
首先我們還是來寫一個Action類:
1
2 public class SayHiAction extends Action {
3 private Shell shell;
4
5 public SayHiAction(Shell shell) {
6 super();
7 this.shell = shell;
8 this.setText("Say&Hi@Ctrl+H");
9 }
10
11 @Override
12 public void run() {
13 InputDialog input = new InputDialog(shell, "Input your name",
14 "Please input your name here:", null, null);
15 if (input.open() == Window.OK) {
16 MessageDialog.openInformation(shell, "Hello", "Hello, "
17 + input.getValue() + "!");
18 }
19
20 }
21
22 }
23
代碼段 17
這只是一個很簡單的Action類,沒有太多可說的。
然后我們創建一個ApplicationWindow類:
1
2 public class Hiyou extends ApplicationWindow {
3
4 private SayHiAction hiaction;
5 public Hiyou(Shell parentShell) {
6 super(parentShell);
7 hiaction=new SayHiAction(getShell());
8 addMenuBar();
9 addToolBar(SWT.FLAT | SWT.WRAP);
10 }
11
12 @Override
13 protected ToolBarManager createToolBarManager(int style) {
14 ToolBarManager toolbar=new ToolBarManager();
15 toolbar.add(hiaction);
16 return toolbar;
17 }
18
19 @Override
20 protected MenuManager createMenuManager() {
21 MenuManager menubar=new MenuManager();
22 MenuManager fileMenu=new MenuManager("&File");
23 fileMenu.add(hiaction);
24 menubar.add(fileMenu);
25 return menubar;
26 }
27
28 /**
29 * @param args
30 */
31 public static void main(String[] args) {
32 Hiyou window=new Hiyou(null);
33 window.setBlockOnOpen(true);
34 window.open();
35 Display.getCurrent().dispose();
36 }
37
38 }
39
代碼段 18
大家可能已經注意到了,在這里面我們重載了createMenuManager和createToolBarManager兩個方法,它們的用途就和名字一樣,一個是用來創建菜單的,一個是用來創建工具條的。重載了這兩個方法以后,通過在構造函數中調用addMenuBar和addToolBar讓工具條和菜單顯示出來。
這里值得一提的是MenuManager和ToolBarManager類,如果大家翻一下API文檔的話會發現它們都是所謂的contribution manager(實現了IConntributionManager接口),你可以通過這些contribution manager來實現對特定組件的管理(添加刪除等等)。
具體到菜單的創建,看了我們上面的代碼就很明白了,就直接調用相應MenuManager的add方法把action添加上就可以了。JFace會自動找到這個Action的getText方法設置菜單的文字。如果是有好幾層菜單,那么只要在重新new一個MenuManager添加到已有的MenuManager里面就可以了。就象前面代碼中的:
menubar.add(fileMenu);
至于工具條就更簡單了,創建一個ToolBarManager然后直接add對應的Action就可以了。
添加圖標
如果菜單只是文字還沒有什么,如果你的工具條都是文字是不是會顯得干巴巴的?其實只要我們為Action設置ImageDescriptor就可以了,比如你可以自己畫一個圖標保存到Action的包下面(我畫了一個hi.gif),然后把Action的構造函數改寫成這樣:
public SayHiAction(Shell shell) {
super();
this.shell = shell;
this.setText("Say&Hi@Ctrl+H");
this.setImageDescriptor(ImageDescriptor.createFromFile(this.getClass(),
"hi.gif"));
}
大家注意最后一句話,就是為action設置圖標的。然后再運行一下就會發現菜單和工具欄都有圖標了。
結束語
這一系列的文章陸陸續續寫到今天,也就寫完了。回頭看一下,雖然內容都很淺顯,不過我覺得在swt和JFace中文資料缺乏的今天,可能也可以給大家帶來一些啟迪。今后我還會寫一些eclipse平臺開發的文章,大家可以登陸到我的blog(http://blog.csdn.net/jayliu)查看。
另外大家也可以登陸到在中國Eclipse社區(http://www.eclipseworld.org),在那里你也可以找到很多的幫助和支持,當然,你也可以在那里找到我。
posted on 2005-11-06 13:09
幻 閱讀(4865)
評論(7) 編輯 收藏 所屬分類:
編程相關