The Spark of Thinking

Focus on Eclipse Tools.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 27 文章 :: 4 评论 :: 0 Trackbacks

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:"nullnull);
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 设置图标的。然后再运行一下就会发现菜单和工具栏都有图标了。

在这里给一个社区做个广告,大家可以登陆到在中国 eclipse 社区( http://www.eclipseworld.org ),在那里你也可以找到很多的帮助和支持,当然,你也可以在那里找到我。



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

[点击此处收藏本文]   幻发表于 2005年11月06日 13:12:00
posted on 2006-07-20 18:16 The Spark of Thinking 阅读(235) 评论(0)  编辑  收藏 所属分类: SWT/JFace

只有注册用户登录后才能发表评论。


网站导航: