一.程序的功能介绍

文件子菜单下面有新建,打开和退出子选项。视图下面有普通子选项。

二.程序分区讲解

(1)在shell窗口中添加菜单条(主菜单)——menu_Bar;

类型是菜单(Menu)样式是菜单条(SWT.BAR)。

(2)然后在主菜单中添加两个子菜单——文件子菜单fileItem和视图子菜单viewItem;

类型是菜单选项(MenuItem)样式是可以有子菜单(SWT.CASCADE)。

(3)在shell窗口中添加两个下拉条菜单——对应文件子菜单的下拉条file_Down和对应视图子菜单的下拉条view_Down;

类型是菜单(Menu)样式是可以下拉条(SWT.DROP_DOWN)。

(4)分别在两个下拉条下添加三个文件菜单选项和一个视图菜单选项。

类型是菜单选项(MenuItem)样式是可以按钮(SWT.PUSH)。

(5)然后将文件子菜单与文件下拉条相关联,视图子菜单与视图下拉条相关联。即将下拉式菜单绑定到菜单项的下面。

(6)在shell中显示菜单条(主菜单)。shell.setMenuBar(menu_Bar)。

三.知识注意点

菜单选项只有在菜单下添加。即MenuItem   menuItem=new  MenuItem(Menu,SWT.CASCADE);  

一个菜单可以包含多个菜单项。

将菜单绑定到控件上。对于所有控件(Control)都可以使用setMenu(Menu,menu)方法将一个菜单绑定到一个控件,这样绑定的菜单为右键弹出式菜单。

对于Shell窗口控件,除了可以使用setMenu(Menu menu)方法设置弹出式菜单外,还可以使用setMenuBar(Menu menu)设置显示在窗口上方的菜单。

四.菜单的样式

(1)SWT.BAR:Shell菜单栏中的菜单

Menu menu_Bar=new Menu(shell,SWT.BAR);

shell.setMenuBar(menu_Bar);若将创建菜单的样式改为其他的,而不是SWT.BAR的话,运行时会抛出“Menu is not a BAR”。

(2)SWT.DROP_DOWN:从菜单栏或者菜单项中弹出的菜单。

本程序中使用的文件菜单就是一个下拉式菜单。创建下拉式菜单时,所放置这个下拉式菜单的菜单样式必须是SWT.CASCADE,否则会抛出“Menu item is not 啊CASCADE”。

方法一

MenuItem fileItem=new MenuItem(menu_Bar,SWT.CASCADE);//弹出菜单的菜单项Menu file_Down=new Menu(shell,SWT.DROP_DOWN);//弹出的菜单fileItem.setMenu(file_Down);//将菜单附加到菜单项上

方法二

MenuItem fileItem=new MenuItem(menu_Bar,SWT.CASCADE);//弹出菜单的菜单项//如果将附加的菜单项作为构造方法,默认为下拉式菜单Menu file_Down=new Menu(fileItem);fileItem.setMenu(file_Down);//将菜单附加到菜单项上

(3)SWT.POP_UP:单击鼠标右键弹出的菜单。

这种弹出式菜单适用于作为上下文菜单。

MenuItem fileItem=new MenuItem(menu_Bar,SWT.CASCADE);//弹出菜单的菜单项//如果将附加的菜单项作为构造方法,默认为下拉式菜单Menu file_Down=new Menu(shell,POP_UP);shell.setMenu(file_Down);//将菜单附加到菜单项上

效果:在窗口的任意位置单击鼠标右键,将弹出右键菜单。

五.菜单项的样式

SWT.PUSH:普通的菜单项,单击类似于按钮的操作。

SWT.RADIO:可以在几个选项之间选中一个,并且选中的选项以黑圆点表示。

SWT.CHECK:类似于多选框,可以同时选中多个选项,并且选中的选项以对勾符号表示。

SWT.CASCADE:可以包含一个下拉菜单的菜单项。

SWT.SEPARATOR:充当分隔条的菜单项,通常没有其他意义。

六.设置菜单项的快捷项 MenuItem createItem=new MenuItem(file_Down,SWT.PUSH);createItem.setText(“新建(&N) ALT+SHIFT+N”);createItem.setAccelerator(SWT.ALT+SWT.SHIFT+’N’);//设置快捷键 七.源码 import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.*;public class E{public static void main(String[] args){Display display=new Display();final Shell shell=new Shell(display);shell.setText(“菜单Menu和菜单项MenuItem”);//创建一个菜单-菜单条Menu menu_Bar=new Menu(shell,SWT.BAR);//(只能)在菜单条上创建一个文件菜单项,可以存在子菜单MenuItem fileItem=new MenuItem(menu_Bar,SWT.CASCADE);fileItem.setText(“文件”);//创建一个文件菜单项对应的文件下拉条Menu file_Down=new Menu(shell,SWT.DROP_DOWN);//在下拉条下创建三个菜单项MenuItem createItem=new MenuItem(file_Down,SWT.PUSH);createItem.setText(“新建(&N)”);MenuItem openItem=new MenuItem(file_Down,SWT.PUSH);openItem.setText(“打开(&O)”);//创建一个分割线new MenuItem(file_Down,SWT.SEPARATOR);MenuItem exitItem=new MenuItem(file_Down,SWT.PUSH);exitItem.setText(“退出(&E)”);//为退出窗口注册监听事件exitItem.addListener(SWT.Selection,new Listener(){public void handleEvent(Event event){shell.dispose();//释放shell窗口}});//将文件的下拉条与文件的菜单项进行关联fileItem.setMenu(file_Down);//创建一个视图菜单选项,下面具有子菜单MenuItem viewItem=new MenuItem(menu_Bar,SWT.CASCADE);viewItem.setText(“视图”);//创建一个视图菜单选项对应的视图下拉条Menu view_Down=new Menu(shell,SWT.DROP_DOWN);//在视图下拉条下创建一个普通视图选项MenuItem normalItem=new MenuItem(view_Down,SWT.PUSH);normalItem.setText(“普通(&N)”);//将视图的菜单选项与视图的下拉条相关联viewItem.setMenu(view_Down);//显示菜单条shell.setMenuBar(menu_Bar);//打开窗口,进行窗口的显示//shell.setSize(400,400);shell.pack();shell.open();while(!shell.isDisposed()){//当窗口没有被释放的时候if(!display.readAndDispatch()){display.sleep();}}display.dispose();}}