`
huanglz19871030
  • 浏览: 248899 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SWT创建菜单

    博客分类:
  • 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();

	}
}



效果图如下:


分享到:
评论

相关推荐

    SWT/JFace从入门到精通

    - 菜单和工具栏:了解如何使用SWT创建菜单和工具栏,为应用程序添加更多的交互功能。 - 性能优化:掌握SWT/JFace的性能调优技巧,确保应用程序运行流畅。 - 国际化支持:学习如何在SWT/JFace应用中实现多语言支持...

    SWT创建Shell窗口

    此外,SWT还提供了丰富的组件,如树、表格、菜单等,满足各种复杂的UI需求。 通过阅读上述博客链接(https://spllot.iteye.com/blog/542928),你可以找到更具体的示例代码和更深入的讲解,进一步提升你的SWT编程...

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

    SWT提供了丰富的组件,包括按钮、文本框、滚动条、树形视图、表格、菜单等,这些组件都可以在64位Windows系统上原生渲染。此外,SWT还支持事件处理、布局管理以及对话框等特性,使得开发者可以方便地构建复杂的用户...

    SWT源码 swt.jar

    3. 功能丰富:SWT提供了丰富的GUI组件,包括表、树、菜单、对话框等,满足大多数GUI需求。 4. 良好的事件处理机制:SWT支持事件驱动编程,允许开发者响应用户的操作。 5. 跨平台:虽然SWT依赖于特定操作系统的库,但...

    SWT配置 SWT配置 SWT配置 SWT配置 SWT配置

    - **Classpath变量**:如果计划开发多个使用SWT的项目,建议创建一个Classpath变量指向`swt.jar`的位置,以便在不同项目中重用。 - **持续性问题**:需要注意的是,上述设置的Classpath和原生库路径并不会自动应用于...

    SWT JFace 按键、事件、监听

    SWT提供了低级别的组件,用于创建跨平台的图形用户界面;而JFace则在此基础上提供了更高级别的抽象,简化了复杂用户界面的开发过程。 在SWT中,键盘事件的处理非常关键,尤其是对于那些依赖于键盘输入的应用程序。...

    SWT 中嵌入Word 控件应用

    这篇博客"SWT中嵌入Word控件应用"可能就是讲述如何在Java SWT界面中集成Word编辑功能,使得用户可以直接在应用程序内部创建、编辑和查看Word文档。 SWT是Eclipse开源项目的一部分,它为Java开发者提供了一套用于...

    swt/jface in action中文版

    - 使用 JFace 创建一个包含多个按钮和菜单项的工具栏,所有这些元素都映射到同一个事件处理器。 - 实现一个使用 JFace 数据绑定机制更新 UI 的示例。 #### 1.3 开发基于SWT/JFace的应用程序 - **开发流程**: -...

    SWT插件中文教程SWT常用方法

    SWT(Standard Widget Toolkit)是Java编程环境中用于创建图形用户界面(GUI)的一种开源库,它是Eclipse项目的一部分。SWT提供了与操作系统本机UI组件的直接交互,从而能够创建性能高效、外观与操作系统的原生应用...

    Eclipse SWT 开发参考

    - **Menu组件**:用于创建菜单和子菜单。 - **Toolbar组件**:用于创建工具栏。 - **Tray组件**:用于创建系统托盘图标。 - **Tree组件**:用于创建树形结构的列表。 - **Table组件**:用于创建表格形式的数据展示。...

    SWT 插件包 (windows 环境)

    SWT提供了丰富的控件集合,如对话框、表单、菜单等,同时支持事件处理和布局管理。SWT与Eclipse的JFace库结合使用时,可以进一步简化UI开发,因为JFace提供了更高级别的抽象,简化了控件的创建和数据绑定。 **Java...

    Eclipse中使用SWT进行界面设计

    它们的创建也需要指定特定的风格位,如SWT.PUSH表示按下按钮,SWT.BORDER表示带边框。 3. 进行SWT开发前的环境设置 在Eclipse中开发SWT应用,需要将SWT库(swt.jar)添加到项目的类路径中。通常,SWT库位于Eclipse...

    swt jface入门教材

    - **UI设计**:使用SWT创建基本的UI组件,再利用JFace进行进一步的扩展和定制。 - **事件处理**:编写事件处理器来响应用户的各种操作。 - **数据绑定**:利用JFace的数据绑定机制来同步UI与后端数据。 - **测试与...

    swt源码以及jar

    通过查看源代码,我们可以学习到如何利用SWT创建窗口、控件、布局管理等,以及如何处理事件和线程。源码还可以帮助我们了解SWT如何与操作系统底层交互,实现原生的外观和性能。 其次,预编译的jar文件是直接在项目...

    org.eclipse.swt包

    - **Menu**: 用于创建菜单栏、弹出菜单和菜单项,支持快捷键和事件处理。 3. **事件处理**: - SWT使用监听器模型处理用户交互。例如,`SelectionListener`用于监听按钮点击事件,`KeyListener`和`MouseListener`...

    记事本(java swt)

    总之,“记事本(Java SWT)”是一个展示SWT强大功能的应用实例,通过它,开发者不仅可以学习到如何使用SWT创建丰富的用户界面,还能了解到如何在Java环境下实现类似Windows记事本的功能,这对于提升Java GUI编程...

    java swt jnilib 库

    在SWT中,JNI库扮演了关键角色,它使得Java代码能够调用操作系统提供的API,以实现与原生UI组件的交互,如窗口、按钮、菜单等。在MacBook M1上,由于硬件架构的变化,需要使用专门为aarch64架构编译的jnilib文件,...

    swt...zhedie.rar_SWT_site:www.pudn.com_折叠菜单

    这个例子展示了如何使用SWT创建一个基本的折叠菜单。在实际项目中,可能还需要处理更多细节,如动态加载数据、菜单项的点击事件、以及自定义样式等。SWT提供的丰富API使得开发者能够灵活地定制和扩展用户界面,满足...

    swt-jface入门

    例如,可以使用`org.eclipse.jface.window.ApplicationWindow`作为基础类,创建一个带有菜单和工作区的窗口。以下是一个简化的JFace "Hello world"示例: ```java import org.eclipse.jface.window....

    swt学SWT者必备的帮助文档

    SWT(Standard Widget Toolkit)是Java编程中用于创建桌面应用程序用户界面的一种库,它是Eclipse项目的一部分,提供了丰富的图形用户界面元素,使得开发者能够构建功能强大的、与平台无关的Java应用。SWT的设计目标...

Global site tag (gtag.js) - Google Analytics