SWT-Menu篇

今天用到Menu,本以为小菜一碟,都是老掉牙的东东了还不简单。逮着键盘狂敲,直到运行的时候,却发现和想象有点出入,bugging。。。

 

虽然很快就解决了问题,但是自己咬到自己舌头的滋味不好受,索性简单复习一下功课。前人言,好记性不如烂笔头。

 

package menu;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.HelpEvent;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class MenuExample1 {
	Display display;
	Shell shell;
	Menu menuBar, fileMenu, secondMenu_Radio, secondMenu_Check, helpMenu;
	MenuItem fileMenuHeader, helpMenuHeader;
	MenuItem filePushItem, fileSeperatorItem, exitItem, helpItem,
			secondMenu_RadioItem, radioItem1, radioItem2, secondMenu_CheckItem,
			checkItem1, checkItem2;
	Text text;

	public MenuExample1() {
		display = new Display();
		shell = new Shell(display);
		shell.setText("Menu Example");
		shell.setSize(300, 200);
		text = new Text(shell, SWT.BORDER);
		text.setBounds(80, 50, 150, 50);

		// 在shell的顶部创建菜单区域,菜单栏的样式必须为SWT.BAR。
		// 可用的样式包括:BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP,LEFT_TO_RIGHT,
		// RIGHT_TO_LEFT
		menuBar = new Menu(shell, SWT.BAR);

		{
			// 创建File菜单
			fileMenuHeader = new MenuItem(menuBar, SWT.CASCADE);// 确保样式是SWT.CASCADE,即级联菜单,这样才会弹出下拉菜单。
			fileMenuHeader.setText("&File");
			// 追加菜单
			fileMenu = new Menu(shell, SWT.DROP_DOWN);
			fileMenuHeader.setMenu(fileMenu);
			filePushItem = new MenuItem(fileMenu, SWT.PUSH);
			filePushItem.setText("&PushMenuItem");

			// 分割栏
			fileSeperatorItem = new MenuItem(fileMenu, SWT.SEPARATOR);

			// 子菜单
			secondMenu_RadioItem = new MenuItem(fileMenu, SWT.CASCADE);
			secondMenu_RadioItem.setText("RadioMenu");
			secondMenu_Radio = new Menu(shell, SWT.DROP_DOWN);
			secondMenu_RadioItem.setMenu(secondMenu_Radio);
			radioItem1 = new MenuItem(secondMenu_Radio, SWT.RADIO);
			radioItem1.setText("Radio1");
			radioItem2 = new MenuItem(secondMenu_Radio, SWT.RADIO);
			radioItem2.setText("Radio3");

			secondMenu_CheckItem = new MenuItem(fileMenu, SWT.CASCADE);
			secondMenu_CheckItem.setText("Check");
			secondMenu_Check = new Menu(shell, SWT.DROP_DOWN);
			secondMenu_CheckItem.setMenu(secondMenu_Check);
			checkItem1 = new MenuItem(secondMenu_Check, SWT.CHECK);
			checkItem1.setText("Check1");
			checkItem2 = new MenuItem(secondMenu_Check, SWT.CHECK);
			checkItem2.setText("Check2");
			// checkItem1.setImage(image)
		}

		{
			// 然后通过setAccelerator来设置快捷键,为CTRL+x,
			// 此时用户可以不需要打开菜单就可以执行该操作

			helpMenuHeader = new MenuItem(menuBar, SWT.CASCADE);
			helpMenuHeader.setText("&Help");
			helpMenu = new Menu(shell, SWT.DROP_DOWN);
			helpMenuHeader.setMenu(helpMenu);
			exitItem = new MenuItem(helpMenu, SWT.PUSH);
			exitItem.setText("E&xit\tCtrl+X");
			exitItem.setAccelerator(SWT.CTRL + 'X');
			helpItem = new MenuItem(helpMenu, SWT.PUSH);
			helpItem.setText("Help\tF1");
		}

		// 事件处理
		{
			// pushItem
			filePushItem.addListener(SWT.Selection, new Listener() {
				public void handleEvent(Event event) {
					text.setText(((MenuItem) event.widget).getText()
							+ "Action performed!");
				}
			});
			// radio
			radioItem1.addListener(SWT.Selection, new Listener() {
				public void handleEvent(Event e) {
					text.setText("Radio item toggled to:"
							+ radioItem1.getSelection());
				}
			});
			// check
			checkItem1.addListener(SWT.Selection, new Listener() {
				public void handleEvent(Event e) {
					text.setText("Check item toggled to:"
							+ checkItem1.getSelection());
				}
			});
			// exit
			exitItem.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent arg0) {
					shell.close();
				}
			});
			// 帮助监听器HelpListener,通过按下F1/Help键,HelpListener被触发
			helpItem.addHelpListener(new HelpListener() {
				public void helpRequested(HelpEvent e) {
					text.setText("Help requested on SubAction");
				}
			});

		}

		shell.setMenuBar(menuBar);
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	public static void main(String[] args) {
		MenuExample1 menuExample = new MenuExample1();
	}
}

如果想变成右键快捷菜单,那就更简单了:将上面的代码稍加处理就可以了。如下:

menuBar = new Menu(shell, SWT.BAR);》》》》》》》》》menuBar = new Menu(shell, SWT.POP_UP);

shell.setMenuBar(menuBar);》》》》》》》》》shell.setMenu(menuBar);

 

 

ok,over。

你可能感兴趣的:(eclipse,UP)