java  JMenu菜单
在一个窗口中,经常需要给窗口添加菜单条。在Java中这一部分是由JMenuBar、JMenu和JMenuItem三个类实现的,分别对应菜单条、菜单和菜单项。
1.菜单栏(JMenuBar
创建菜单栏是制作菜单的第一步,并JMenuBar的构造方法相当简单,如通过“JMenuBar TestJMenuBar=new JMenuBar();”语句即可创建。而在设置菜单栏时,可以通过表9-22所示的常用方法。
表9-22  JMenuBar的常用方法及说明
方法
说明
add(JMenu c)
将指定的菜单添加到菜单栏的末尾。
getMenu(int index)
获取菜单栏中指定位置的菜单。
getMenuCount( )
获取菜单栏上的菜单数。
setHelpMenu(JMenu menu)
设置用户选择菜单栏中的帮助选项时显示的帮助菜单。
getHelpMenu( )
获取菜单栏的帮助菜单。
setSelected(Component sel)
设置当前选择的组件,更改选择模型。
isSelected( )
如果当前已选择了菜单栏的组件,则返回true
需要说明的是,JMenuBar类根据JMenu添加的顺序从左到右显示,并建立整数索引。
2.菜单(JMenu
在添加完菜单栏后,并不会显示任何菜单内容,所以还需要在菜单栏中添加菜单内容。菜单内容的JMenu类的构造方法有4种:
JMenu( )  构造一个空菜单。
JMenu(Action a)  构造一个菜单,菜单属性由相应的动作来提供。
JMenu(String s)  用给定的标志构造一个菜单。
JMenu(String s,Boolean b)  构造一个新JMenu,用提供的字符串作为其文本并指定其是否为分离式(tear-off)菜单。
在构造完后,使用JMenuBar类的add方法添加到菜单栏中。而JMenu的常用方法如表9-23所示。
表9-23  JMenu类方法及其说明
方法
说明
setModel(ButtonModel newModel)
设置菜单的数据模型。
isSelected( )
如果菜单当前是被选中的,则返回true
setSelected(Boolean b)
设置菜单的选择状态。
isPopupMenuVisible( )
如果菜单的弹出菜单可见,则返回true
setPopupMenuVisible(Boolean b)
设置弹出菜单的可见性。如果未启用菜单,则此方法无效。
getPopupMenuOrigin( )
计算JMenu的弹出菜单的原点。
setMenuLocation(int x,int y)
设置弹出菜单的位置。
add(JMenuItem menuItem)
将某个菜单项追加到此菜单的末尾,返回添加的菜单项。
add(Component c)
将组件追加到此菜单的末尾,并返回添加的控件。
add(Component c,int index)
将指定控件添加到此容器的给定位置上,如果index等于-1,则将控件追加到末尾。
add(String s)
创建具有指定文本的菜单项,并将其追加到此菜单的末尾。
addSeparator( )
将新分隔符追加到菜单的末尾。
insert(String s,int pos)
在给定的位置插入一个具有指定文本的新菜单项。
insert(JMenuItem mi,int pos)
在给定的位置插入指定的JMenuitem
insertSeparator(int index)
在指定的位置插入分隔符。
getItem(int pos)
获得指定位置的JMenuItem,如果位于pos的组件不是菜单项,则返回null
getItemCount( )
获得菜单上的项数,包括分隔符。
remove(JMenuItem item)
从此菜单移除指定的菜单项,如果不存在弹出菜单,则此方法无效。
remove(int pos)
从此菜单移除指定索引处的菜单项。
isTopLevelMenu( )
如果菜单是顶层菜单,返回true
getPopupMenu( )
获得与此菜单关联的弹出菜单,如果不存在将创建一个弹出菜单。
addMenuListener(MenuListener l)
添加菜单事件的侦听器。
getMenuListeners( )
获得利用addMenuListener()添加到此JMenu的所有MenuListener组成的数组。
3.菜单项(JMenuItem
在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。
菜单的该实现是一个包含JMenuItem的弹出窗口,用户选择JMenuBar上的项时会显示该JMenuItem。除JMenuItem之外,JMenu还可以包含JSeparator。其菜单项的构建方法如下:
JMenuItem()  创建不带有设置文本或图标的JMenuItem。
JMenuItem(Action a)  创建从指定的Action获取其属性的菜单项。
JMenuItem(Icon icon)  创建带有指定图标的JMenuItem。
JMenuItem(String text)  创建带有指定文本的JMenuItem。
JMenuItem(String text, Icon icon)  创建带有指定文本和图标的JMenuItem。
JMenuItem(String text, int mnemonic)  创建带有指定文本和键盘助记符的菜单项。
菜单中的项的实现,即菜单项本质上是位于列表中的按钮。当用户选择“按钮”时,则执行与菜单项关联的操作。如表9-24所示为JMenuItem菜单项的常用方法。
表9-24  JMenuItem菜单项的常用方法
方法
说明
ionPropertyChanged(Action action, String propertyName)
更新按钮的状态以响应相关的操作中的属性更改。
addMenuDragMouseListener(MenuDragMouseListener l)
MenuDragMouseListener添加到菜单项。
addMenuKeyListener(MenuKeyListener l)
MenuKeyListener添加到菜单项。
configurePropertiesFromAction(Action a)
在此按钮上设置属性以匹配指定Action中的属性。
getAccelerator( )
返回作为菜单项的加速器的KeyStroke
getAccessibleContext( )
返回与JMenuItem关联的AccessibleContext
getComponent( )
返回用于绘制此对象的java.awt.Component
getMenuDragMouseListeners( )
返回利用addMenuDragMouseListener()添加到JMenuItem的所有菜单栏包括MenuDragMouseListener组成的数组。
getMenuKeyListeners( )
返回利用addMenuKeyListener()添加到JMenuItem的所有MenuKeyListener的数组。
getSubElements( )
此方法返回包含此菜单组件的子菜单组件的数组。
getUIClassID( )
返回用于构造呈现此组件时使用的L&F类名称的后缀。
init(String text, Icon icon)
利用指定文本和图标初始化菜单项。
isArmed( )
返回菜单项是否被“调出”。
menuSelectionChanged(boolean isIncluded)
当选择或取消选择MenuElement时由MenuSelectionManager调用。
paramString( )
返回JMenuItem的字符串表示形式。
processMenuDragMouseEvent(MenuDragMouseEvent e)
处理菜单中的鼠标拖动。
processMenuKeyEvent(MenuKeyEvent e)
处理菜单中的快捷键。
removeMenuDragMouseListener(MenuDragMouseListener l)
从菜单项中移除 MenuDragMouseListener
removeMenuKeyListener(MenuKeyListener l)
从菜单项中移除 MenuKeyListener
setAccelerator(KeyStroke keyStroke)
设置修改键,它能直接调用菜单项的操作侦听器而不必显示菜单的层次结构。
setArmed(boolean b)
将菜单项标识为“调出”。
setEnabled(boolean b)
启用或禁用菜单项。
setModel(ButtonModel newModel)
设置此按钮表示的模型。
setUI(MenuItemUI ui)
设置呈现此组件的外观对象。
updateUI( )
利用当前外观的值重置UI属性。
本实例中,介绍了创建菜单栏,并在菜单栏中添加菜单,以及菜单中添加菜单项的方法。其详细代码如下:
import javax.swing.*;
public class MyMenu extends JFrame {
    public MyMenu() {
    //定义菜单栏对象
    JMenuBar mb = new JMenuBar();
    //定义菜单对象
    JMenu fileMenu = new JMenu("常规");
    JMenu fileMenu2 = new JMenu("签到");
    //在菜单中添加子菜单
    fileMenu2.add(new JCheckBoxMenuItem("早上好!"));
    fileMenu2.add(new JCheckBoxMenuItem("下午好!"));
    fileMenu2.add(new JCheckBoxMenuItem("晚安!再见!"));
    //在菜单中添加菜单项
    fileMenu.add("计时");
    //添加分隔线
    fileMenu.addSeparator();
    //在菜单中添加菜单项
    fileMenu.add(fileMenu2);
    //添加分隔线
    fileMenu.addSeparator();
    //在菜单中添加菜单项
    fileMenu.add("退出");
    //在工具栏中添加菜单
    mb.add(fileMenu);
    //将mb设置到窗口中
    setJMenuBar(mb);
    this.setSize(300, 250);
    this.setVisible(true);
    }
    public static void main(String args[]) {
    new MyMenu();
    }
}
在代码中,通过“JMenu fileMenu = new JMenu("常规");”创建一个菜单内容,然后添加到“JMenuBar mb = new JMenuBar();”所创建的菜单栏中。在“签到”菜单项中,通过“new JCheckBoxMenuItem("早上好!")”语句,创建并添加子菜单,并且子菜单以复选框的方式显示,如图9-18所示。
图9-18  创建菜单

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。