SWT创建菜单

使用SWT创建一个菜单条,模拟实现了多级菜单,分隔符,快捷键,响应事件等功能.
代码如下:

Java代码 复制代码
  1. import org.eclipse.swt.SWT;   
  2. import org.eclipse.swt.events.SelectionEvent;   
  3. import org.eclipse.swt.events.SelectionListener;   
  4. import org.eclipse.swt.graphics.Image;   
  5. import org.eclipse.swt.widgets.Display;   
  6. import org.eclipse.swt.widgets.Menu;   
  7. import org.eclipse.swt.widgets.MenuItem;   
  8. import org.eclipse.swt.widgets.Shell;   
  9.   
  10. public class MenuTest {   
  11.     static Display display = new Display();   
  12.     static Shell shell = new Shell(display);   
  13.   
  14.     /*  
  15.      * 创建多级菜单, 采用SWT.CASCADE样式值可以加入子菜单,采用SWT.PUSH样式值不可以加入子菜单  
  16.      */  
  17.     public static void createMenu() {   
  18.   
  19.         shell.setSize(500500);   
  20.         shell.setText("menu test window");   
  21.         shell.setImage(new Image(display, "images/Home.png"));   
  22.   
  23.         // 通过shell对象和SWT.BAR样式值来创建一个菜单条   
  24.         Menu menu = new Menu(shell, SWT.BAR);   
  25.         // 在菜单条的基础之上创建一个File的菜单   
  26.         MenuItem file = new MenuItem(menu, SWT.CASCADE);   
  27.         file.setText("&File");   
  28.         // 先在Shell上创建一个下拉框,然后将下拉框添加到File菜单上   
  29.         Menu filemenu = new Menu(shell, SWT.DROP_DOWN);   
  30.         file.setMenu(filemenu);   
  31.         // 在下拉框上创建菜单项Open   
  32.         final MenuItem openItem = new MenuItem(filemenu, SWT.CASCADE);   
  33.         openItem.setText("&Open");   
  34.         // 在shell上创建一个下拉框,并把它加到open菜单上   
  35.         Menu childmenu = new Menu(shell, SWT.DROP_DOWN);   
  36.         openItem.setMenu(childmenu);   
  37.         // 在open菜单上创建一个子菜单child   
  38.         final MenuItem childItem = new MenuItem(childmenu, SWT.PUSH);   
  39.         childItem.setText("&Child");   
  40.         // 在open菜单上创建一个子菜单dialog   
  41.         final MenuItem dialogItem = new MenuItem(childmenu, SWT.PUSH);   
  42.         dialogItem.setText("&Dialog");   
  43.         // 在菜单项之间创建一个分隔符   
  44.         new MenuItem(filemenu, SWT.SEPARATOR);   
  45.         // 在下拉框上创建菜单项Exit   
  46.         MenuItem exitItem = new MenuItem(filemenu, SWT.PUSH);   
  47.         exitItem.setText("&Exit");   
  48.   
  49.         // 设置edit菜单   
  50.         MenuItem edit = new MenuItem(menu, SWT.CASCADE);   
  51.         edit.setText("&Edit");   
  52.         Menu editmenu = new Menu(shell, SWT.DROP_DOWN);   
  53.         edit.setMenu(editmenu);   
  54.         MenuItem cutItem = new MenuItem(editmenu, SWT.PUSH);   
  55.         cutItem.setText("&Cut\tCTRL+X");   
  56.         // 设置快捷键   
  57.         cutItem.setAccelerator(SWT.CTRL + 'X');   
  58.         // 在菜单项之间创建一个分隔符   
  59.         new MenuItem(editmenu, SWT.SEPARATOR);   
  60.         MenuItem copyItem = new MenuItem(editmenu, SWT.PUSH);   
  61.         copyItem.setText("&Copy\tCTRL+C");   
  62.         // 设置快捷键   
  63.         copyItem.setAccelerator(SWT.CTRL + 'C');   
  64.         // 在菜单项之间创建一个分隔符   
  65.         new MenuItem(editmenu, SWT.SEPARATOR);   
  66.         MenuItem pasteItem = new MenuItem(editmenu, SWT.PUSH);   
  67.         pasteItem.setText("&Paste\tCTRL+V");   
  68.         // 设置快捷键   
  69.         pasteItem.setAccelerator(SWT.CTRL + 'V');   
  70.   
  71.         // 设置window菜单   
  72.         MenuItem window = new MenuItem(menu, SWT.CASCADE);   
  73.         window.setText("&Window");   
  74.         Menu windowmenu = new Menu(shell, SWT.DROP_DOWN);   
  75.         window.setMenu(windowmenu);   
  76.         final MenuItem maxItem = new MenuItem(windowmenu, SWT.PUSH);   
  77.         maxItem.setText("&Max");   
  78.         // 在菜单项之间创建一个分隔符   
  79.         new MenuItem(windowmenu, SWT.SEPARATOR);   
  80.         MenuItem minItem = new MenuItem(windowmenu, SWT.PUSH);   
  81.         minItem.setText("&Min");   
  82.   
  83.         // 设置help菜单   
  84.         MenuItem help = new MenuItem(menu, SWT.CASCADE);   
  85.         help.setText("&Help");   
  86.         Menu helpmenu = new Menu(shell, SWT.DROP_DOWN);   
  87.         help.setMenu(helpmenu);   
  88.         MenuItem aboutItem = new MenuItem(helpmenu, SWT.PUSH);   
  89.         aboutItem.setText("&About");   
  90.   
  91.         // 添加一个option菜单,用于添加单选菜单和复选菜单   
  92.         MenuItem option = new MenuItem(menu, SWT.CASCADE);   
  93.         option.setText("&Option");   
  94.         Menu optionmenu = new Menu(shell, SWT.DROP_DOWN);   
  95.         option.setMenu(optionmenu);   
  96.         MenuItem checkItem1 = new MenuItem(optionmenu, SWT.CHECK);   
  97.         checkItem1.setText("Check1");   
  98.         MenuItem checkItem2 = new MenuItem(optionmenu, SWT.CHECK);   
  99.         checkItem2.setText("Check2");   
  100.         // 设置默认为选中   
  101.         checkItem2.setSelection(true);   
  102.         // 设置分隔符   
  103.         new MenuItem(optionmenu, SWT.SEPARATOR);   
  104.         MenuItem radioItem1 = new MenuItem(optionmenu, SWT.RADIO);   
  105.         radioItem1.setText("Radio1");   
  106.         // 设置默认为选中   
  107.         radioItem1.setSelection(true);   
  108.         MenuItem radioItem2 = new MenuItem(optionmenu, SWT.RADIO);   
  109.         radioItem2.setText("Radio2");   
  110.   
  111.         // 为菜单添加相应的事件   
  112.         childItem.addSelectionListener(new SelectionListener() {   
  113.   
  114.             @Override  
  115.             public void widgetSelected(SelectionEvent arg0) {   
  116.                 // TODO Auto-generated method stub   
  117.                 Shell parent = (Shell) maxItem.getParent().getParent()   
  118.                         .getParent();   
  119.                 Shell child = new Shell(parent, SWT.RESIZE | SWT.MAX);   
  120.                 child.setText("child item has been clicked");   
  121.                 child.setImage(new Image(display, "images/Alert.png"));   
  122.                 child.setSize(400100);   
  123.                 child.open();   
  124.             }   
  125.   
  126.             @Override  
  127.             public void widgetDefaultSelected(SelectionEvent arg0) {   
  128.                 // TODO Auto-generated method stub   
  129.             }   
  130.         });   
  131.   
  132.         // 将菜单条添加到shell上   
  133.         shell.setMenuBar(menu);   
  134.         // 弹出右键菜单   
  135.         shell.setMenu(createEditPopup());   
  136.         shell.open();   
  137.         while (!shell.isDisposed()) {   
  138.             if (display.readAndDispatch()) {   
  139.                 display.sleep();   
  140.             }   
  141.         }   
  142.         display.dispose();   
  143.     }   
  144.   
  145.     /*  
  146.      * 创建一个右键菜单 通过样式值SWT.POP_UP来创建一个右键弹出菜单  
  147.      */  
  148.     public static Menu createEditPopup() {   
  149.         Menu popMenu = new Menu(shell, SWT.POP_UP);   
  150.         MenuItem cutItem = new MenuItem(popMenu, SWT.PUSH);   
  151.         cutItem.setText("&Cut");   
  152.         MenuItem copyItem = new MenuItem(popMenu, SWT.PUSH);   
  153.         copyItem.setText("&Copy");   
  154.         MenuItem pasteItem = new MenuItem(popMenu, SWT.PUSH);   
  155.         pasteItem.setText("&Paste");   
  156.         cutItem.addSelectionListener(new SelectionListener() {   
  157.   
  158.             @Override  
  159.             public void widgetSelected(SelectionEvent arg0) {   
  160.                 // TODO Auto-generated method stub   
  161.                 System.out.println("cut");   
  162.             }   
  163.   
  164.             @Override  
  165.             public void widgetDefaultSelected(SelectionEvent arg0) {   
  166.                 // TODO Auto-generated method stub   
  167.   
  168.             }   
  169.         });   
  170.         pasteItem.addSelectionListener(new SelectionListener() {   
  171.   
  172.             @Override  
  173.             public void widgetSelected(SelectionEvent arg0) {   
  174.                 // TODO Auto-generated method stub   
  175.                 System.out.println("paste");   
  176.             }   
  177.   
  178.             @Override  
  179.             public void widgetDefaultSelected(SelectionEvent arg0) {   
  180.                 // TODO Auto-generated method stub   
  181.   
  182.             }   
  183.         });   
  184.         copyItem.addSelectionListener(new SelectionListener() {   
  185.   
  186.             @Override  
  187.             public void widgetSelected(SelectionEvent arg0) {   
  188.                 // TODO Auto-generated method stub   
  189.                 System.out.println("copy");   
  190.             }   
  191.   
  192.             @Override  
  193.             public void widgetDefaultSelected(SelectionEvent arg0) {   
  194.                 // TODO Auto-generated method stub   
  195.   
  196.             }   
  197.         });   
  198.         return popMenu;   
  199.     }   
  200.   
  201.     public static void main(String[] args) {   
  202.         MenuTest.createMenu();   
  203.   
  204.     }   
  205. }  
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

public class MenuTest {
	static Display display = new Display();
	static Shell shell = new Shell(display);

	/*
	 * 创建多级菜单, 采用SWT.CASCADE样式值可以加入子菜单,采用SWT.PUSH样式值不可以加入子菜单
	 */
	public static void createMenu() {

		shell.setSize(500, 500);
		shell.setText("menu test window");
		shell.setImage(new Image(display, "images/Home.png"));

		// 通过shell对象和SWT.BAR样式值来创建一个菜单条
		Menu menu = new Menu(shell, SWT.BAR);
		// 在菜单条的基础之上创建一个File的菜单
		MenuItem file = new MenuItem(menu, SWT.CASCADE);
		file.setText("&File");
		// 先在Shell上创建一个下拉框,然后将下拉框添加到File菜单上
		Menu filemenu = new Menu(shell, SWT.DROP_DOWN);
		file.setMenu(filemenu);
		// 在下拉框上创建菜单项Open
		final MenuItem openItem = new MenuItem(filemenu, SWT.CASCADE);
		openItem.setText("&Open");
		// 在shell上创建一个下拉框,并把它加到open菜单上
		Menu childmenu = new Menu(shell, SWT.DROP_DOWN);
		openItem.setMenu(childmenu);
		// 在open菜单上创建一个子菜单child
		final MenuItem childItem = new MenuItem(childmenu, SWT.PUSH);
		childItem.setText("&Child");
		// 在open菜单上创建一个子菜单dialog
		final MenuItem dialogItem = new MenuItem(childmenu, SWT.PUSH);
		dialogItem.setText("&Dialog");
		// 在菜单项之间创建一个分隔符
		new MenuItem(filemenu, SWT.SEPARATOR);
		// 在下拉框上创建菜单项Exit
		MenuItem exitItem = new MenuItem(filemenu, SWT.PUSH);
		exitItem.setText("&Exit");

		// 设置edit菜单
		MenuItem edit = new MenuItem(menu, SWT.CASCADE);
		edit.setText("&Edit");
		Menu editmenu = new Menu(shell, SWT.DROP_DOWN);
		edit.setMenu(editmenu);
		MenuItem cutItem = new MenuItem(editmenu, SWT.PUSH);
		cutItem.setText("&Cut\tCTRL+X");
		// 设置快捷键
		cutItem.setAccelerator(SWT.CTRL + 'X');
		// 在菜单项之间创建一个分隔符
		new MenuItem(editmenu, SWT.SEPARATOR);
		MenuItem copyItem = new MenuItem(editmenu, SWT.PUSH);
		copyItem.setText("&Copy\tCTRL+C");
		// 设置快捷键
		copyItem.setAccelerator(SWT.CTRL + 'C');
		// 在菜单项之间创建一个分隔符
		new MenuItem(editmenu, SWT.SEPARATOR);
		MenuItem pasteItem = new MenuItem(editmenu, SWT.PUSH);
		pasteItem.setText("&Paste\tCTRL+V");
		// 设置快捷键
		pasteItem.setAccelerator(SWT.CTRL + 'V');

		// 设置window菜单
		MenuItem window = new MenuItem(menu, SWT.CASCADE);
		window.setText("&Window");
		Menu windowmenu = new Menu(shell, SWT.DROP_DOWN);
		window.setMenu(windowmenu);
		final MenuItem maxItem = new MenuItem(windowmenu, SWT.PUSH);
		maxItem.setText("&Max");
		// 在菜单项之间创建一个分隔符
		new MenuItem(windowmenu, SWT.SEPARATOR);
		MenuItem minItem = new MenuItem(windowmenu, SWT.PUSH);
		minItem.setText("&Min");

		// 设置help菜单
		MenuItem help = new MenuItem(menu, SWT.CASCADE);
		help.setText("&Help");
		Menu helpmenu = new Menu(shell, SWT.DROP_DOWN);
		help.setMenu(helpmenu);
		MenuItem aboutItem = new MenuItem(helpmenu, SWT.PUSH);
		aboutItem.setText("&About");

		// 添加一个option菜单,用于添加单选菜单和复选菜单
		MenuItem option = new MenuItem(menu, SWT.CASCADE);
		option.setText("&Option");
		Menu optionmenu = new Menu(shell, SWT.DROP_DOWN);
		option.setMenu(optionmenu);
		MenuItem checkItem1 = new MenuItem(optionmenu, SWT.CHECK);
		checkItem1.setText("Check1");
		MenuItem checkItem2 = new MenuItem(optionmenu, SWT.CHECK);
		checkItem2.setText("Check2");
		// 设置默认为选中
		checkItem2.setSelection(true);
		// 设置分隔符
		new MenuItem(optionmenu, SWT.SEPARATOR);
		MenuItem radioItem1 = new MenuItem(optionmenu, SWT.RADIO);
		radioItem1.setText("Radio1");
		// 设置默认为选中
		radioItem1.setSelection(true);
		MenuItem radioItem2 = new MenuItem(optionmenu, SWT.RADIO);
		radioItem2.setText("Radio2");

		// 为菜单添加相应的事件
		childItem.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				Shell parent = (Shell) maxItem.getParent().getParent()
						.getParent();
				Shell child = new Shell(parent, SWT.RESIZE | SWT.MAX);
				child.setText("child item has been clicked");
				child.setImage(new Image(display, "images/Alert.png"));
				child.setSize(400, 100);
				child.open();
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
			}
		});

		// 将菜单条添加到shell上
		shell.setMenuBar(menu);
		// 弹出右键菜单
		shell.setMenu(createEditPopup());
		shell.open();
		while (!shell.isDisposed()) {
			if (display.readAndDispatch()) {
				display.sleep();
			}
		}
		display.dispose();
	}

	/*
	 * 创建一个右键菜单 通过样式值SWT.POP_UP来创建一个右键弹出菜单
	 */
	public static Menu createEditPopup() {
		Menu popMenu = new Menu(shell, SWT.POP_UP);
		MenuItem cutItem = new MenuItem(popMenu, SWT.PUSH);
		cutItem.setText("&Cut");
		MenuItem copyItem = new MenuItem(popMenu, SWT.PUSH);
		copyItem.setText("&Copy");
		MenuItem pasteItem = new MenuItem(popMenu, SWT.PUSH);
		pasteItem.setText("&Paste");
		cutItem.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				System.out.println("cut");
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub

			}
		});
		pasteItem.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				System.out.println("paste");
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub

			}
		});
		copyItem.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				System.out.println("copy");
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub

			}
		});
		return popMenu;
	}

	public static void main(String[] args) {
		MenuTest.createMenu();

	}
}



效果图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值