Java中GUI—菜单表格和多文档界面
Java中的高级图形用户界面就是菜单、表格、多文档界面
——菜单
菜单窗口分为两类:常规菜单窗口和弹出式菜单窗口
常规菜单窗口的试图如下:

常规菜单窗口有三部分组成:


1、所以常规菜单由: 菜单栏 (JMenuBar) 、下拉式菜单(JMenu) 、 和 菜单项 组成;
2、菜单项又分成
命令式菜单项(JMenuItem) 这是最常用的一个菜单项
复选式菜单项(JCheckBoxMenuItem)
单选式菜单项(JRadioButtonMenuItem)
3、构建常规菜单窗口的一般步骤是:
创建容器——在容器中添加一个菜单栏——在菜单栏中添加数个下拉式菜单——在每个下拉式菜单中添加数个菜单项
所以可以预见这些菜单栏和下拉式菜单实际上就是一种容器,到最后我们可以知道实际上我们也可以将其他的下拉式菜单作为“菜单项”,构建多级菜单窗口
4、我们把菜单系统的结构图介绍一下





6、分析:
①创建菜单栏——public JMenuBar() ;
②在顶层容器中设置菜单栏
像JFrame、JDialog、JApplet 顶层容器中都有设置菜单栏的方法
public void setJMenuBar(JMenuBar menubar) ;
这样一来就相当于在当前的窗口中添加了菜单栏
③在菜单栏中添加下拉式菜单
JMenuBar类中有成员方法:
public JMenu add(JMenu menu) ;
④在下拉式菜单中添加其他的下拉式菜单或者菜单项
JMenu类中有成员方法:
public JMenuItem add(JMenuItem menuItem) ;
由前面的菜单系统图可以知道由于JMenuBar是JMenuItem的
子类,所以我们不仅能够将命令式菜单项(或其他不常用的菜单项)
作为菜单项,还能够将其他的下拉式菜单作为“菜单项”;这样一来就能
够创建多级菜单但我们将下拉式菜单作为“菜单项”时,在对应的项中
就会出现小的三角箭头:

⑤JMenuItem类的构造方法:
public JMenuItem(String text) ;
public JMenuItem(Icon icon) ;
public JMenuItem(String text , Icon icon) ;
public JMenuItem(String text , Icon icon , int mnemonic) ;
其中参数mnemonic指定了创建的菜单项的助记符,助记符都是
字符型的,但是这个构造方法中的参数是int型的,即需要知道,字符的
Unicode编码,这一点问题没有,因为int和char能够进行隐含的转换
所以在使用这个构造方法时,可以直接用形如‘a’这样的字符作为
mnemonic
⑥助记符设置
菜单项和下拉式菜单都可以拥有助记符,如果菜单项或者下拉式菜单中有
设定的助记符中的字符的话,在菜单项或下拉式菜单中的那个字符的下面
就会自动的添加一条下划线;一旦我们为某个菜单项或者下拉式菜单设定了
助记符,那么我们就能够通过使用“Alt 键+ 助记符键”使下拉式菜单展开
或者执行菜单项所对应的命令;
菜单项和下拉式菜单都有设置助记符的方法:
public void setMnemonic(char mnemonic);
public void setMnemonic(int mnemonic) ;
注意:有些操作系统不支持助记符功能,还有一个问题是,在给
小应用程序添加助记符时,可能会与浏览器本身的助记符发生冲突,
因此,要谨慎一些
⑦快捷键的设置
如果需要可以给菜单项设置快捷键(虽然JMenu继承自JMenuItem,
但是JMenu对象是不能够设置快捷键的,这是有道理的,因为下拉菜
单并不是执行什么命令)在JMenuItem的成员方法中有专门用于设置
快捷键的方法:
public void setAccelerator(KeyStroke keyStroke) ;
参数keyStroke所定义的按键或者按键组合就是该菜单项的快捷键
快捷键由javax.swing.KeyStroke类的实例对象定义,但是我们可以利用
这个类中的静态方法 :
public static KeyStroke getKeyStroke(char key) ;
public static KeyStroke getKeyStroke(String s) ;
来获得KeyStroke对象,非常的简便,其中参数的格式非常的重要
格式:
①方法一种参数是单个char字母 , 但是这个字母必须是大写字母
这个大写字母就作为才菜单项的快捷键
②方法二中参数是字符串s, 字符串 s 必须由三部分组成
“修饰词”+ 空格 + “大写字母” ;
比如:“ctrl”+“ ”+“S” ;(或者是“ctrl ” + “S”) ;
这样一来就将ctrl+S作为了该菜单项的快捷键了;
现在再看看上面的实例程序就会发现,有错误,应该将mC[][]中的小写
字母改成大写字母,否则是不会创建快捷键的;
但是助记符是不区分大小写的,也就说大写小写都一样
当我们将实例中的程序改正后就有这样的运行结果:

⑧实现菜单项的命令或操作事件处理
与相应的按钮事件处理一样,我们从系统图中可以看到
菜单项是javax.swing.AbstractButton的子类,也就说,实际上
菜单项就是按钮,那么事件处理机制就和JButton是一样的
⑨菜单分隔条
在菜单项之间我们可以加上一个菜单分隔条,为的是能够更加清晰的区分
菜单项,菜单分隔条实际上就是下图中open和save之间的一条线

在JMenu中有方法用来为当期的下拉式菜单下属的各个菜单项之间
添加菜单分隔条,而不是在JMenuItem中;
public void insertSeparator(int index) ;
index 的值指定了分隔条添加的位置,从0开始
——弹出式菜单
①弹出式菜单类是javax.swing.JPopupMenu类,所谓的弹出式菜单
就是我们在许多软件中单击右键是弹出的菜单,比如在桌面上单击右键
出现的菜单;跟常规菜单不同的是,弹出式菜单并需要在容器中设置什么
菜单栏,我们只需要创建一个javax.swing.JPopupMenu类的实例对象
之后要做的是,当我们在某个容器中点击鼠标右键时,
调用javax.swing.JPopupMenu的成员方法show(参数);就能够将
菜单弹出来这就行了
②所以创建弹出式菜单的过程为:
创建JPopupMenu实例对象——向实例对象中添加菜单项JMenuItem
或者下拉式菜单JMenu——在容器中添加鼠标监听器——当在容器中单击
右键时,调用实例对象的show()方法,将菜单显示出来
③下面通过一个实例来显示这个过程
程序的最终结果为:



④分析:
1、JPopupMenu成员方法:
public JMenuItem add(JMenuItem menuItem) ;
所以可以将下拉式菜单作为“菜单项”
2、一般不为弹出式菜单项添加快捷键,因为如果添加了快捷键的话,只有当
菜单项展开时,才能够使用快捷键,这已经失去了意义
——表格JTable和多文档界面的内容以后再讲

浙公网安备 33010602011771号