至此,按钮的事件处理已经全部弄完了。接下来就开始对菜单栏进行设置了。在Java中有一系列类对菜单进行相关设置,主要有三个,分别是JMenuBar、JMenu及JMenuItem类,对应菜单条、菜单及菜单项的设置。
先来看看win7计算器的菜单模样:
win7的计算器菜单条上包括查看、编辑、帮助三个菜单,首先我创建了一个Menu类,再初始化一个JMenuBar对象,再创建三个Jmenu并添加(add)到JMenuBar中。代码如下:
JMenuBarmenuBar = new JMenuBar(); // 菜单栏
JMenuJmView = new JMenu("查看(V)"); // 查看菜单
JMenuJmEdit = new JMenu("编辑(E)"); // 编辑菜单
JMenuJmHelp = new JMenu("帮助(H)"); // 帮助菜单
menuBar.add(JmView);
menuBar.add(JmEdit);
menuBar.add(JmHelp);
菜单字体也可以改变,方法如页面编程那样使用setFont()方法。接着要将菜单条加到Calculator中,这里要使用Jframe的setMenuBar()方法而不能用add(),否则菜单会很难看的。
接下来我们注意到,在“查看”菜单下的菜单项有多种样式的,包括单选式菜单项、多选式菜单项,还有子菜单和分隔符(在“编辑”菜单下也有类似菜单项)。这些样式的菜单项如何弄出来呢?在Java中分别有几种类与这些样式的菜单项相对应,分别是JmenuItem的子类JRadioButtonMenuItem和JCheckBoxMenuItem,对应单选及多选式的菜单项。而单选菜单项的选择状况是与同一组的其他菜单状况相关,如果是点击了同一组的其他单选菜单项,则原本菜单项的选择将被取消。Java中提供ButtonGroup类对此进行控制,具体代码如下,以分隔符分出的第一部分为例:
JRadioButtonMenuItem[]jrView = { new JRadioButtonMenuItem("标准型(T)"),new JRadioButtonMenuItem("科学型(S)"), newJRadioButtonMenuItem("程序员(P)"), new JRadioButtonMenuItem("统计信息(A)") }; // 单选菜单条
ButtonGroupbuttonGroup1 = new ButtonGroup();
for(int i = 0; i < jrView.length; i++) {
jrView[i].setFont(f);
buttonGroup1.add(jrView[i]);
JmView.add(jrView[i]);
}
子菜单里的单选菜单项与分隔符分开的第三部分是一组的,所以要放到一个ButtonGroup中。
多选式菜单项也是同理加上去即可。
而子菜单则可以直接使用JMenu类,将其加入菜单中即可出现子菜单的效果。
分隔符则直接使用JMenu的addSeperator()方法添加在适当位置。
另外在“编辑”菜单下有些菜单项是灰色的,表示不可用。这可以用菜单项的setEnable(false)将其禁用即可。
最后将字体设置一下,最终效果是这样的:
具体编程的细节还可参考:http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html。这样子就大致完成了菜单的外貌。接下来还有关于快捷键、事件处理的部分留到最后一天解决。