`
yianpuodiaotu
  • 浏览: 241553 次
  • 性别: 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-4.3-win64.rar,swt-4.3-win32-x86.jar

    标题中的"swt-4.3-win64.rar"和"swt-4.3-win32-x86.jar"是针对Windows平台的不同版本的SWT库,其中"win64"适用于64位系统,而"win32-x86"则是为32位系统设计的。 SWT库的核心在于提供了一组与操作系统紧密集成的...

    swt-4.3.2-win32-win32-x86_64.zip_SWT_swt 4.3_swt-4.3 x86_64_swt-

    swt框架 适用与window下java窗口开发~~~~

    swt-win32-4763.dll下载

    %1 不是有效的 Win32 应用程序。no swt-win32 in java.library.path替换文件

    swt-win64-3.6.2.jar

    标题中的"swt-win64-3.6.2.jar"是一个特定版本的 SWT (Standard Widget Toolkit) 库,专为64位Windows操作系统编译的。SWT是Eclipse基金会开发的一个开源GUI(图形用户界面)库,主要用于Java应用程序。它提供了与本...

    SWT-Designer

    SWT-Designer是一款用于开发Java SWT(Standard Widget Toolkit)和JFace用户界面的Eclipse插件。它提供了图形化的设计工具,使得开发者可以更直观、更高效地创建GUI(图形用户界面)。SWT是IBM推出的开源GUI库,它...

    swt-arm64.jar.zip

    在本案例中,我们关注的是SWT的arm64版本——`swt-arm64.jar`,这是一个专为国产化服务器架构设计的库,适用于飞腾服务器和麒麟服务器等基于ARM64架构的系统。 在传统的Java GUI开发中,开发者通常会使用AWT或Swing...

    swt-3.8M5-win32-win32-x86

    "swt-3.8M5-win32-win32-x86"是SWT的一个特定版本,针对Windows 32位操作系统设计。这个压缩包包含了SWT库的源码和相关资源,方便开发者进行定制和调试。 在给定的文件列表中,我们看到以下内容: 1. **.classpath...

    swt-4.2.2-win32-win32-x86_64

    这个"swt-4.2.2-win32-win32-x86_64"是一个专为Windows 64位操作系统设计的SWT版本,它包含了必要的组件和库,使得开发者能够在64位的Windows环境下构建和运行Java应用程序,提供与操作系统紧密集成的图形用户界面。...

    swt-gdip-win32-4763.dll下载

    org.eclipse.swt.SWTException: Unable to load graphics library [GDI+ is required] (java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.internal.gdip.GdiplusStartupInput)替换文件

    swt-3.7.2-gtk-linux-x86_64.zip

    "swt-3.7.2-gtk-linux-x86_64.zip" 是一个针对Linux 64位系统,基于GTK+(GIMP Toolkit)的SWT版本,版本号为3.7.2。这个压缩包包含了在Eclipse环境中使用SWT Designer所需的一些关键文件。 首先,`.classpath`文件...

    swt-deginer - plugins-3(共5 部分)

    swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)

    DJNativeSwing-SWT.jar、DJNativeSwing.jar、swt-win-x64.jar

    swt-win-x64.jar包含了Windows 64位系统所需的所有本地库,使得Java应用可以在该平台上渲染SWT组件。 在描述中提到的服务器端通过HTML页面生成图片并存储到本地,这可能涉及到Web应用或Java服务器端的图形处理。...

    Dll文件jacob.dll & swt-win32-3139.dll

    在这个场景中,我们关注的是两个特定的DLL文件:`jacob.dll` 和 `swt-win32-3139.dll`。 `jacob.dll` 是Java和COM(Component Object Model)之间桥梁的组件,全称为Java COM Bridge。Jacob库使得Java开发者能够...

    swt运行所需的dll

    swt运行时所需的dll文件,包括swt-awt-win32-3236.dll swt-gdip-win32-3236.dll swt-win32-3229.dll swt-win32-3236.dll

    kettle-ui-swt-7.1.0.0-12.jar

    kettle-ui-swt-7.1.0.0-12.jar 可修改包中资源 核心jar包

    SWT-Designer-Ecpipse3.3 ( 1)

    将SWT-Designer-Ecpipse3.3 (1)、SWT-Designer-Ecpipse3.3 (2)、SWT-Designer-Ecpipse3.3 (3),这三部分都下载下来,将features.rar解压后的子文件放到eclipse(或者myeclipse)下的features文件夹下,将plugins1....

    swt-win32-3236.dll

    jface/swt windows系统中所需动态链接库

    swt-4.3-64

    "swt-4.3-64" 标题暗示这是一个针对64位Windows操作系统的SWT库的版本4.3。 SWT的主要特点是它使用操作系统提供的原生控件,而不是Java Swing中的抽象组件。这使得SWT构建的应用程序在外观和交互上与系统上的其他...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...

    swt-debug.jar

    SWT开发中需要用到的SWT-debug.jar包很重要,含swt-debug.jar

Global site tag (gtag.js) - Google Analytics