`
yianpuodiaotu
  • 浏览: 243539 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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。

分享到:
评论
2 楼 yeisu 2010-10-30  
     
1 楼 DAOException 2009-08-07  
   

相关推荐

    SWT桌面程序开发实例图解教程

    ### SWT桌面程序开发实例图解教程 #### 一、SWT简介 SWT(Simple Widget Toolkit)是一款由Eclipse项目提供的跨平台GUI编程工具包,主要用于构建Java应用...希望这篇教程能帮助读者更好地掌握SWT桌面程序的开发技巧。

    Jface/swt学生成绩管理程序

    本篇文章将深入探讨如何利用JFace和SWT技术来构建一个学生成绩管理程序,并分析其中的关键知识点。 首先,JFace是Eclipse项目的一部分,它建立在SWT之上,提供了更高级别的抽象和面向对象的API,简化了GUI的开发。...

    SWT应用的开发实例:没有使用到OSGi

    这篇博客文章“SWT应用的开发实例:没有使用到OSGi”可能是介绍如何在不依赖OSGi框架的情况下,使用SWT进行应用程序开发的具体步骤和实践案例。 OSGi(Open Service Gateway Initiative)是一种模块化系统,主要...

    Eclipse_Swt_Jface_核心应用_部分19

    第2篇 SWT进阶篇 第4章 SWT开发基础 40 4.1 SWT应用程序基本结构 40 4.2 Display类 42 4.2.1 Display类概述 42 4.2.2 Display类常用方法 42 4.3 Shell类 45 4.3.1 Shell类概述 45 4.3.2 不同窗口的...

    rcp收集资料上传

    在IT行业中,RCP(Rich Client Platform)是Eclipse框架的一部分,它提供了一种构建桌面应用程序...如果要深入学习RCP开发,还需要掌握Eclipse插件开发、SWT/JFace UI组件、模型-视图-控制器(MVC)设计模式等相关知识。

Global site tag (gtag.js) - Google Analytics