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小时内删除。
发表评论