JAVA将菜单分类和为菜单增加快捷键

在编写AWT组件的时候,有时需要将菜单分类,这个时候可以用下划线来分类。
那么增加下划线的方法是:
this.menu[i].addSeparator();

下面看看动态给菜单加上快捷键

JMenuItem有一个方法不知道你注意过没有:setAccelerator。

打开帮助文件对这个方法的描述是: 设置组合键,它能直接调用菜单项的操作侦听器而不必显示菜单的层次结构。所以用这个方法就能制作我们所要的快捷键了。

F5: 		 KeyStroke.getKeyStroke(KeyEvent.F5, 0);

Ctrl+Q:	 KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK);

a:			 KeyStroke. getKeyStroke('a');
	
Alt+Shift+C:KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);

当然,如果你不想引入一些如KeyEvent或InputEvent类的话,那么你就可以用KeyStroke.getKeyStroke(String s)方法来简化他:

F5:		KeyStroke.getKeyStroke("F5");

Ctrl+Q:	KeyStroke.getKeyStroke("control Q ");

a:			KeyStroke.getKeyStroke( "typed a" );

Alt+Shift+C:KeyStroke.getKeyStroke("alt shift released X ");
在这里插入代码片

下面看看具体的例子:

package cn.com;


import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

public class AwtTest  extends JFrame
{ 
	private JMenuBar menuBar;				//菜单条
	private JMenu[] menu;					//菜单
	private JMenuItem[][] menuItem;			//菜单条
	
	
	public void init()
	{
		//成员变量实例化
		this.menuBar=new JMenuBar();
		this.menu=new JMenu[] {new JMenu("File"),new JMenu("Edit"),new JMenu("Source")};
		this.menuItem=new JMenuItem[][]{
			{new JMenuItem("New"),	new JMenuItem("Open File"),	new JMenuItem("Close")},
			{new JMenuItem("Paste"),	new JMenuItem("Delete")},
			{new JMenuItem("Format"),	new JMenuItem("Clean Up")}
		};
		
		this.setJMenuBar(this.menuBar);		//添加菜单条
		this.menu[0].add(this.menuItem[0][0]);
		/*
		 * 添加下划线
		 */
		this.menu[0].addSeparator();
		this.menu[0].add(this.menuItem[0][1]);
		this.menu[0].add(this.menuItem[0][2]);
		

		for (int i=1; i<this.menu.length; i++)
		{
			for (int j=0; j<this.menuItem[i].length; j++)
			{
				this.menuItem[1][j].setAccelerator(KeyStroke.getKeyStroke("control Q "));
				this.menuItem[2][j].setAccelerator(KeyStroke.getKeyStroke("typed a "));
				this.menu[i].add(this.menuItem[i][j]);
				if (j!=this.menuItem[i].length-1)
					this.menu[i].addSeparator();
			}
			
		}
		
		for (int i=0; i<this.menu.length; i++)
		{
			this.menuBar.add(this.menu[i]);
		}
		
		
		//注册窗口监视器
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent  e)
			{
				System.exit(0);		
				
			}
		});
		
		//窗口属性设置
		this.setTitle("菜单应用");
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		this.setSize(400,500);
		
	}
	
	
	public AwtTest()
	{
		init();
	}
	
	public static void  main(String args[])
	{
		AwtTest winAwtTest=new AwtTest();
	}
	
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值