在这篇文章中,笔者会介绍Java图形界面编程中菜单组件的用法。关于菜单组件,因为java存在AWT编程和Swing编程,所以菜单组件也存在AWT菜单和Swing菜单。因为Swing组件使用的比较多,所以笔者的案例中都是运用Swing菜单中的类。
在介绍Swing菜单之前,先看看AWT菜单组件的类关系图:
Swing菜单组件与AWT菜单组件中的类结构类似。
Swing菜单组件的用法在API中已经给出了,所以笔者在这里不必要列出。这里笔者要说一说,Swing菜单组件中的快捷键,下面笔者会详细介绍Swing中菜单的快捷键。
public void setMnemonic(int mnemonic)
这个方法可以设置键盘助记字符,不过该方法的使用是依赖Swing组件的菜单分层结构的,也就是说设置了该助记字符的菜单项目必须已经展开了,才能使用(通过和Alt+键结合使用),
例如:
JFrame jf=new JFrame("窗口测试"); JMenuBar bar=new JMenuBar(); JMenu file=new JMenu("菜单 "); JMenuItem createfile=new JMenuItem("创建文件 VK_N"); createfile.setMnemonic(KeyEvent.VK_N); createfile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("创建文件被点击"); } }); file.add(createfile); bar.add(file); jf.setJMenuBar(bar); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);
效果图为:
如果在上面这种图片的效果下,摁下Ctr+N的话,控制台是不会打印东西的,只有把鼠标移到菜单上,看见“创建菜单”项后,使用Ctr+N控制台才会打印消息。
值得注意的是 setMnemonic 并非是JMenuItem的方法,而是来着他的父类AbstractButton的,所以该方法通常是不应用于菜单项的。
JMenuItem自身有一个方法 public void setAccelerator(KeyStroke keyStroke) 该方法的功能要比上面的那个方法要强大,该方法可以设置菜单项的快捷键,它是不依赖菜单的分层结构的。
例如:
JFrame jf=new JFrame("窗口测试"); JMenuBar bar=new JMenuBar(); JMenu file=new JMenu("菜单 "); JMenuItem createfile=new JMenuItem("创建文件"); createfile.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK)); createfile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("创建文件被点击"); } }); file.add(createfile); bar.add(file); jf.setJMenuBar(bar); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);
效果图:
摁下Ctr+N键的话,控制台就会打印消息了。
同时我们也可以看到,快捷键也被附加在文字的后面了。